0

cookievalue .ASPXANONYMOUSを見ると、文字列です。

WZnX-rXHygEkAAAAOTFhZjE5YTctZmEzZi00MTMwLWEwNTAtYjYwMzI0N2M0NTY4gQUsRlThiJWAjBgmBnpeIba7eGo1

値Request.AnonymousIDはGuidです。

ASPXANONYMOUSからAnonymousIDにどのように移行しますか?

FormsAuthenticationで発生するいくつかの問題をデバッグするためにこれが必要です。

4

1 に答える 1

8

はい、匿名IDはGUIDです。Cookie文字列は、IDとその他のデータを含む暗号化された値です。

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

    internal AnonymousIdData(string id, DateTime dt);
}

デフォルトでは、匿名Cookieは90日間有効であり、訪問するたびに更新されます。

Request.IsAuthenticated == falseの場合、Request.AnonymousIDをリクエストユーザー名として扱うことができます。

AnonymousIdentificationModuleを参照してください

更新:コメントに応じて、はい、値をデコードできますが、なぜですか?

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);
于 2010-03-19T23:13:13.393 に答える