0

如果我看看我的 cookievalue .ASPXANONYMOUS 它是一个字符串,即

WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1

值 Request.AnonymousID 是一个 Guid。

你如何从 ASPXANONYMOUS 到 AnonymousID ?

我需要这个来调试我在 FormsAuthentication 中遇到的一些问题。

4

1 回答 1

8

是的,匿名 id 是一个 GUID。cookie 字符串是包含 id 和其他数据的加密值:

[Serializable]
internal class AnonymousIdData
{
    internal string AnonymousId;
    internal DateTime ExpireDate;

    internal AnonymousIdData(string id, DateTime dt);
}

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

当 Request.IsAuthenticated==false 时,您可以将 Request.AnonymousID 视为请求用户名。

匿名识别模块

更新:作为对评论的回应,是的,您可以解码该值,但为什么呢?

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);
于 2010-03-19T23:13:13.393 回答