¿Cómo se obtiene a partir de la galleta AnonymousID ASPXANONYMOUS?
-
21-09-2019 - |
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.
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.
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);