2011-10-25 26 views
1

2つの異なるマシンの2つのブラウザがテストページに当たっています。テストページはCookieを取得しています。そこにない場合は、クッキーが作成されます。クッキーは2つの異なるブラウザマシンのクライアントと同じです

public string GetUserCookieId() 
{ 
    string cookieName = "CookieId3"; 

    HttpCookie userInfoCookies = Request.Cookies[cookieName]; 

    string cookieId = ""; 

    if (userInfoCookies != null) 
     cookieId = userInfoCookies.Value; 

    if (string.IsNullOrEmpty(cookieId)) 
    { 
     cookieId = Guid.NewGuid().ToString(); 

     HttpCookie cookie = new HttpCookie(cookieName); 
     cookie.Value = cookieId; 
     cookie.Expires = DateTime.Now.AddDays(90); 
     Response.SetCookie(cookie); 
    } 

    return cookieId; 
} 

両方のブラウザマシンが同じCookie値をページに表示しています。これは一度私は "CookieId3"にクッキーの名前を変更しました。私が間違っているところを教えてください。

ご覧のとおり、このメソッドは静的ではありません。ありがとう

+0

興味深い。私は現時点では大丈夫です。 Request.UserHostAddress()でGuid.NewGuid()。ToString()を置き換えると、ページに表示されているのと同じIPアドレスにCookieが設定されますか? – Mead

+1

おそらく、ページをキャッシュするように設定していますか? –

+0

出力キャッシュやその他のサーバーキャッシュ(ロードバランサなど)を意味していました。 '[OutputCache]'属性がどこにもないことを確認してください。 –

答えて

0

この問題は、ClassLibraryからコードにアクセスしたときのRequestとHttpContext.Current.Requestの違いのようです。

誰もがこれにいくつかの光を当てることができるですか?

次のように動作します。

public string GetUserCookieId() 
{ 
    string cookieName = "CookieId18"; 

    HttpCookie userInfoCookies = HttpContext.Current.Request.Cookies[cookieName]; 

    string cookieId = ""; 

    if (userInfoCookies != null) 
     cookieId = userInfoCookies.Value; 

    if (string.IsNullOrEmpty(cookieId)) 
    { 
     cookieId = Guid.NewGuid().ToString(); 

     HttpCookie cookie = new HttpCookie(cookieName); 
     cookie.Value = cookieId; 
     cookie.Expires = DateTime.Now.AddDays(90); 
     HttpContext.Current.Response.SetCookie(cookie); 
    } 

    return cookieId; 
} 
+0

http://www.dotnetperls.com/httpcontext-requestを参照してください。ページで、リクエストはHttpApplicationの 'Request'メンバーに解決されています(http://msdn.microsoft.com/en-us/library/systemを参照)。 .web.httpapplication.aspx)。あなたが書いている新しいクラスの文脈では、あなたはその解決策を持たないでしょう。あなたが今持っているものは動作します。また、関連するHttpContextをGetUserCookieId()に渡して一般化してください(単体テストが楽になります)。 – Mead

+0

この情報をお寄せいただき、ありがとうございます。 –

関連する問題