Pregunta

Si tengo un vistazo a mi cookievalue .ASPXANONYMOUS es decir, una cadena

WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1

El valor Request.AnonymousID es un GUID.

¿Cómo se obtiene a partir ASPXANONYMOUS a AnonymousID?

Necesito esto para depurar algunos problemas que tengo con FormsAuthentication.

¿Fue útil?

Solución

Sí, un identificador anónimo es un GUID. La cadena cookie es un valor cifrado que contiene el ID y otros datos:

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

    internal AnonymousIdData(string id, DateTime dt);
}

Por defecto, cookies anónimas tienen una validez de 90 días y se actualizan cada visita.

Puede tratar Request.AnonymousID como la solicitud de nombre de usuario cuando Request.IsAuthenticated == false.

AnonymousIdentificationModule

ACTUALIZACIÓN: En respuesta a un comentario, sí, se puede decodificar el valor, pero ¿por qué?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top