Comment obtenez-vous AnonymousID de cookies ASPXANONYMOUS?
-
21-09-2019 - |
Question
Si je regarde mon cookievalue .ASPXANONYMOUS est une chaîne par exemple
WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1
La valeur Request.AnonymousID est un GUID.
Comment obtenez-vous de ASPXANONYMOUS à AnonymousID?
Je en ai besoin pour déboguer quelques questions que j'ai avec FormsAuthentication.
La solution
Oui, un identifiant anonyme est un GUID. La chaîne de cookie est une valeur cryptée contenant l'identité et d'autres données:
[Serializable]
internal class AnonymousIdData
{
internal string AnonymousId;
internal DateTime ExpireDate;
internal AnonymousIdData(string id, DateTime dt);
}
Par défaut, les cookies anonymes sont valables pendant 90 jours et sont mises à jour chaque visite.
Vous pouvez traiter Request.AnonymousID comme le nom d'utilisateur de demande quand Request.IsAuthenticated == false.
voir AnonymousIdentificationModule
Mise à jour: En réponse à un commentaire, oui, vous pouvez décoder la valeur, mais pourquoi?
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);