- PR -

複数のブラウザでのcookieの挙動

1
投稿者投稿内容
suzuka
会議室デビュー日: 2003/12/09
投稿数: 7
お住まい・勤務地: 東京
投稿日時: 2004-03-04 15:55
いつもお世話になっております。

ASP.NETでcookieを使ったWebアプリを開発しています。
事情があり、ログインIDなどをSessionではなくCookieに保存しているのですが、
ブラウザ(IE)を二つ立ち上げてログインすると、最初にログインしたCookieの値が後から
ログインした値で上書きされてしまうことがあります。Cookieは有効期限をしていません。

Cookieを使う限り、ブラウザを二つ立ち上げて操作するとおこりうる現象なのでしょうか?
原因や解決法等ご存じの方がいらしたらご教授下さい。よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-04 22:20
引用:

suzukaさんの書き込み (2004-03-04 15:55) より:

原因等ご存じの方がいらしたらご教授下さい。よろしくお願いします。


#意図的に編集

 IEを起動して、「ツール」メニューから「インターネットオプション」を選択してください。「インターネット一時ファイル」グループの「設定」ボタンをクリックし、「ファイルの表示」ボタンをクリックします。エクスプローラが起動しますので、「名前」でソートします。ソートしたら名前が「Cookie」で始まるファイルを探します。それがクライアントに保存されているcookieです。

 原因がわかりましたか?



 cookieはファイルで保存され、WindowsNT系のIEでは、OSにログインしているユーザごとに保存されています(デフォルトの場合)。ブラウザを何枚開こうが、それらが使うファイルは1つです。従って、後から開いた(アクセスした)方が有効になります。

 Sessionはまたちょっと違って、「ファイル」メニューから開いた場合は同じセッションになると思います。IEを、メニューから起動した場合は別のセッションになります。
suzuka
会議室デビュー日: 2003/12/09
投稿数: 7
お住まい・勤務地: 東京
投稿日時: 2004-03-05 21:26
Jitta様
非常に分かりやすい回答どうもありがとうございました。
結局ブラウザは同じファイルを使うため、後で更新されたほうが有効になってしまうのですね。

別のやり方を探すことにします。
ありがとうございました。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-03-05 21:52
引用:

suzukaさんの書き込み (2004-03-05 21:26) より:
結局ブラウザは同じファイルを使うため、後で更新されたほうが有効になってしまうのですね。

別のやり方を探すことにします。


クッキーを永続化しない設定にすれば、ファイルには保存されないのでファイルの競合は防げると思うんですが、どうでしょう?
ブラウザで新しい画面を開いた場合なんかは共有されますけど(既にログインした状態になるか、そこはアプリの仕様次第ですが)、別のプロセスとして起動された複数ブラウザなら競合することは無いはずです。
suzuka
会議室デビュー日: 2003/12/09
投稿数: 7
お住まい・勤務地: 東京
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)