Domanda

Se ho uno sguardo al mio CookieValue .ASPXANONYMOUS è una stringa cioè

WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1

Il valore Request.AnonymousID è un GUID.

Come si arriva da ASPXANONYMOUS a AnonymousID?

Ho bisogno di questo per eseguire il debug dei problemi che ho con FormsAuthentication.

È stato utile?

Soluzione

Si, un ID anonimo è un GUID. La stringa di cookie è un valore criptato contenente l'ID e altri dati:

[Serializable]
internal class AnonymousIdData
{
    internal string AnonymousId;
    internal DateTime ExpireDate;

    internal AnonymousIdData(string id, DateTime dt);
}

Per impostazione predefinita, i cookie anonimi sono validi per 90 giorni e vengono aggiornati ogni visita.

Si può trattare Request.AnonymousID come username richiesta al momento Request.IsAuthenticated == false.

AnonymousIdentificationModule

UPDATE: In risposta a un commento, sì, è possibile decodificare il valore, ma perché?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top