- - PR -
複数のブラウザでのcookieの挙動
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-04 15:55
いつもお世話になっております。
ASP.NETでcookieを使ったWebアプリを開発しています。 事情があり、ログインIDなどをSessionではなくCookieに保存しているのですが、 ブラウザ(IE)を二つ立ち上げてログインすると、最初にログインしたCookieの値が後から ログインした値で上書きされてしまうことがあります。Cookieは有効期限をしていません。 Cookieを使う限り、ブラウザを二つ立ち上げて操作するとおこりうる現象なのでしょうか? 原因や解決法等ご存じの方がいらしたらご教授下さい。よろしくお願いします。 | ||||
|
投稿日時: 2004-03-04 22:20
#意図的に編集 IEを起動して、「ツール」メニューから「インターネットオプション」を選択してください。「インターネット一時ファイル」グループの「設定」ボタンをクリックし、「ファイルの表示」ボタンをクリックします。エクスプローラが起動しますので、「名前」でソートします。ソートしたら名前が「Cookie」で始まるファイルを探します。それがクライアントに保存されているcookieです。 原因がわかりましたか? cookieはファイルで保存され、WindowsNT系のIEでは、OSにログインしているユーザごとに保存されています(デフォルトの場合)。ブラウザを何枚開こうが、それらが使うファイルは1つです。従って、後から開いた(アクセスした)方が有効になります。 Sessionはまたちょっと違って、「ファイル」メニューから開いた場合は同じセッションになると思います。IEを、メニューから起動した場合は別のセッションになります。 | ||||
|
投稿日時: 2004-03-05 21:26
Jitta様
非常に分かりやすい回答どうもありがとうございました。 結局ブラウザは同じファイルを使うため、後で更新されたほうが有効になってしまうのですね。 別のやり方を探すことにします。 ありがとうございました。 | ||||
|
投稿日時: 2004-03-05 21:52
クッキーを永続化しない設定にすれば、ファイルには保存されないのでファイルの競合は防げると思うんですが、どうでしょう? ブラウザで新しい画面を開いた場合なんかは共有されますけど(既にログインした状態になるか、そこはアプリの仕様次第ですが)、別のプロセスとして起動された複数ブラウザなら競合することは無いはずです。 | ||||
|
投稿日時: 2004-03-08 20:36
なちゃ様
返信ありがとうございました。 クッキーに格納する時に有効期限を設定しなければ永続化しないと認識していますが、 間違っているのでしょうか。 protected void SetCookie(string Name, string Value) { if (Response.Cookies[Name] == null) { Response.Cookies.Add(new HttpCookie(Name)); } Response.Cookies[sName].Value = Value; } この様にセットしているので永続化してないと思っています。 上記のようにやった時に、ブラウザを複数起動(別プロセス)してCookieを読みに行った時に 更新内容がもう一つのブラウザに反映されてしまいます。 結局セッションIDをURLに含める形にしました。 どうもありがとうございました。 |
1