Como você consegue o Anonymousid do Cookie Aspxanonymous?
-
21-09-2019 - |
Pergunta
Se eu der uma olhada no meu cozinheiro .aspxanonymous, é uma corda, ou seja,
Wznx-rxhygekaaaaotfhzje5ytctzMezzi00MTMWLWEWNTATYJYWMZI0N2M0NTY4GQUSRLTHIJWAJBGMBNPEIBA7EGO1
O Valor Request.anonymousId é um GUID.
Como você vai do Aspxanonymous ao Anonymousid?
Eu preciso disso para depurar alguns problemas que tenho com o FormSauthentication.
Solução
Sim, um ID anônimo é um GUID. A corda do cookie é um valor criptografado que contém o ID e outros dados:
[Serializable]
internal class AnonymousIdData
{
internal string AnonymousId;
internal DateTime ExpireDate;
internal AnonymousIdData(string id, DateTime dt);
}
Por padrão, os cookies anônimos são válidos por 90 dias e são atualizados a cada visita.
Você pode tratar o request.anonymousid como o nome de usuário do pedido quando solicita.isAuthenticated == false.
Vejo AnonymousIdentificationModule
ATUALIZAÇÃO: Em resposta a um comentário, sim, você pode decodificar o valor, mas 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);