代码之家  ›  专栏  ›  技术社区  ›  Mathias F

如何从Cookie Aspxanonymous获取匿名ID?

  •  0
  • Mathias F  · 技术社区  · 16 年前

    如果我看一下我的CookieValue.aspxanonymous它是一个字符串ie

    wznx-rxhygekaaaotfhzje5ytctzmezzi00mtmwlwewntatyjywmzi0n2mnty4gqusrlthijwajbgmbnpeiba7ego1型

    值request.anonymousid是一个guid。

    你怎么从Aspxanonymous到AnonymousID?

    我需要这个来调试一些与表单验证有关的问题。

    1 回复  |  直到 16 年前
        1
  •  6
  •   Sky Sanders    16 年前

    是的,匿名id是guid。Cookie字符串是包含ID和其他数据的加密值:

    [Serializable]
    internal class AnonymousIdData
    {
        internal string AnonymousId;
        internal DateTime ExpireDate;
    
        internal AnonymousIdData(string id, DateTime dt);
    }
    

    默认情况下,匿名cookies有效期为90天,每次访问都会刷新。

    当request.isauthenticated==false时,可以将request.anonymousID视为请求用户名。

    看见 AnonymousIdentificationModule

    更新: 对于一个评论,是的,你可以解码这个值,但是为什么呢?

    string aId = Request.AnonymousID;
    
    string anonCookieValue = Request.Cookies[".ASPXANONYMOUS"].Value;
    MethodInfo method = typeof(AnonymousIdentificationModule).GetMethod("GetDecodedValue", BindingFlags.Static | BindingFlags.NonPublic);
    object anonymousIdData = method.Invoke(null, new object[] { anonCookieValue });
    var field = anonymousIdData.GetType().GetField("AnonymousId", BindingFlags.Instance | BindingFlags.NonPublic);
    string anonymousId = (string) field.GetValue(anonymousIdData);
    field = anonymousIdData.GetType().GetField("ExpireDate", BindingFlags.Instance | BindingFlags.NonPublic);
    DateTime expired = (DateTime) field.GetValue(anonymousIdData);
    
    // why? just use Request.AnonymousID    
    Debug.Assert(aId == anonymousId);
    
    推荐文章