2012-03-14 9 views
2

ログイン中にCookieを作成しています。クッキースコープはパスに限定されていると考えられます。Cookie.PathはInternet Explorerで動作しません

HttpCookie cookie = new HttpCookie(cookieName); 
    cookie.Expires = DateTime.Now.AddMinutes(expiryMinutes); 
    cookie["username"] = username; 
    SetCookieValue(cookie, "username", username); 
    SetCookieValue(cookie, "password", password); 
    SetCookieValue(cookie, "domain", domain); 
    cookie.HttpOnly = true; 
    cookie.Secure = true; 
    cookie.Path = Request.Url.GetLeftPart(UriPartial.Authority); 

問題は、このコードは、FirefoxとChromeで完璧に動作している間、それは、Internet Explorer(とOpera)で動作しないということです。問題のある行は最後のものです。ここでcookie.Pathパラメータを設定すると、IEはそのCookieを破棄します(私は思います)。私はこれをChromeコンソールでデバッグしました。クッキーは正しいパス(例:/ application)でうまく作成されています。

ここで間違いがありますか?この

cookie.Path = "/"; 

答えて

0

変更

cookie.Path = Request.Url.GetLeftPart(UriPartial.Authority); 

私はあなたが全体のドメインにクッキーを適用すると仮定しています。

+0

いいえ、パス固有のCookieが必要です。これは "/"に設定しても動作しますが、心配はありません。 /は、/と異なるものに設定すると問題が始まります。 –

+0

HTTP応答ヘッダーを投稿できますか? – alykhalid

1

IEのDocument.Сookieは、基本的なWinINET InternetGetCookie実装の不明瞭なバグのため、ファイル名を含むパス属性で設定されている場合はCookieを返しません。例えば

ページがそうのような自体にクッキーを設定した場合、:

Set-Cookie: HTTPSet-PathCookie=PASS;path=/check.htm 

クッキーは、HTTPリクエストを送信されますが、Document.Сookieコレクションには表示されません。

this blog entryを参照してください。

+0

ええ、素敵です。しかし、私はファイル名を設定していません、 "/ applicaion1"のようなディレクトリ名だけです。そしてそれはまだ動作しません(IE9) –

+0

オペレーションは、オペラでも動作していないと言います。 – alykhalid

+0

同じですが、ChromeとFirefoxでうまく動作し、IE(IE10でテスト済み)やOperaではまったく動作しません... –

関連する問題