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.

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top