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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top