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.

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top