Как вы получаете AnonymousID из файла cookie ASPXANONYMOUS? - PullRequest
0 голосов
/ 20 марта 2010

Если я посмотрю на мое кулинарное окружение

WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1

Значение Request.AnonymousID является Guid.

Как вы переходите от ASPXANONYMOUS к AnonymousID?

Мне нужно это для устранения некоторых проблем с FormsAuthentication.

1 Ответ

6 голосов
/ 20 марта 2010

Да, анонимный идентификатор - это GUID. Строка cookie - это зашифрованное значение, содержащее идентификатор и другие данные:

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

    internal AnonymousIdData(string id, DateTime dt);
}

По умолчанию анонимные файлы cookie действуют в течение 90 дней и обновляются при каждом посещении.

Вы можете рассматривать Request.AnonymousID как имя пользователя запроса, когда Request.IsAuthenticated == false.

см. AnonymousIdentificationModule

UPDATE: В ответ на комментарий, да, вы можете декодировать значение, но почему?

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...