Wie bekommt man AnonymousID von Cookie ASPXANONYMOUS?
-
21-09-2019 - |
Frage
Wenn ich einen Blick auf meine Cookie .ASPXANONYMOUS haben, ist es ein String dh
WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1
Der Wert Request.AnonymousID ist ein Guid.
Wie bekommt man von ASPXANONYMOUS zu AnonymousID?
Ich brauche dies einige Probleme zu debuggen ich mit FormsAuthentication haben.
Lösung
Ja, eine anonyme ID ist ein GUID. Das Cookie-String ist ein verschlüsselten Wert die ID und andere Daten enthalten:
[Serializable]
internal class AnonymousIdData
{
internal string AnonymousId;
internal DateTime ExpireDate;
internal AnonymousIdData(string id, DateTime dt);
}
In der Standardeinstellung sind anonym Cookies für 90 Tage gültig und werden bei jedem Besuch aktualisiert.
Sie können Request.AnonymousID als Anfrage Benutzernamen behandeln, wenn Request.IsAuthenticated == false.
finden Sie unter AnonymousIdentificationModule
UPDATE: Als Reaktion auf einen Kommentar, ja, können Sie den Wert dekodieren, aber warum?
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);