你如何从cookie ASPXANONYMOUS获得AnonymousID?

Mat*_*s F 0 asp.net-mvc forms-authentication anonymousidentification

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

WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1

值Request.AnonymousID是Guid.

你怎么从ASPXANONYMOUS到AnonymousID?

我需要这个来调试我使用FormsAuthentication的一些问题.

Sky*_*ers 8

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

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

    internal AnonymousIdData(string id, DateTime dt);
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,匿名cookie有效期为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);
Run Code Online (Sandbox Code Playgroud)

  • **为什么?**因为有时您可以访问Cookie,但没有(合理的或适当的)访问Request.AnonymousID.例如在signalr和webapi中. (2认同)