如何从饼干ASPXANONYMOUS得到AnonymousID?
-
21-09-2019 - |
题
如果我看看我的cookievalue .ASPXANONYMOUS它是一个字符串,即
WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1
在值Request.AnonymousID是一个GUID。
你如何从ASPXANONYMOUS到AnonymousID?
我需要这个调试一些问题,我有FormsAuthentication。
解决方案
是,一个匿名ID是一个GUID。该cookie串是包含ID和其它数据的加密值:
[Serializable]
internal class AnonymousIdData
{
internal string AnonymousId;
internal DateTime ExpireDate;
internal AnonymousIdData(string id, DateTime dt);
}
默认情况下,匿名饼干的有效期为90天,刷新每次访问。
Request.IsAuthenticated时,可以治疗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);
不隶属于 StackOverflow