質問者
セッションIDが同じ値で生成されることはあるのでしょうか?

質問
-
セッションIDの保存方法としてSQLサーバのASPStateにキーを保存しています。
(sessionStateのMode:SQLServer Mode)ここで生成・保存されるセッションIDなのですが、有効期限内のセッションIDの中では
それぞれユニークではあると思うのですが(アプリケーション単位にユニークな値のはず)、
例えばタイムアウトであるセッションIDが削除された後、別のユーザのリクエストに合わせて
セッションIDが生成された時、以前に作成されたセッションIDと同じ値が生成される、
という事がありえるのでしょうか?現在、セッションIDによるユーザごとの情報をDBに格納しておいて、セッションIDが破棄されたものと
見比べてセッションIDが存在しないユーザ情報を破棄したいのですが、
もしかしたら同じIDが生成されることがないかと疑問に思った次第です。
(その場合、以前に作成されたユーザが破棄されずに別のユーザの生きているデータに見えてしまう?)ご存知の方いらっしゃいましたら、ご教授下さいませ。
すべての返信
-
MSDNライブラリの期限切れのセッション ID の再生成に「既定では、Cookie なしのセッションで使用されるセッション ID 値はリサイクルされます。」って書いてあるのを見つけました。
-
IIJIMAS様 早速のご回答ありがとうございました。
こちらの資料拝見させていただきました。
cookielessの場合はリサイクルされるようですね。申し訳ございません、現状の設定しております内容に不通知項目がございました。
cookieless="false"
環境としては.NetFramework 1.1(開発はVS2003、サーバはWin2K)
での実装を検討しております。こちらの場合にも同様の生成方法となるのでしょうか?
その他ご回答いただければ幸いでございます。追伸:
どうでもいいのですが、記述内容を確認しようとプレビューで見ると入力内容が消えてしまいますね。。。 -
おってぃー さんからの引用 申し訳ございません、現状の設定しております内容に不通知項目がございました。
cookieless="false"での実装を検討しております。ごめんなさい、cookieless="false"が普通ですよね。
どちらにせよ、ASP.NETが内部でSessionIDManager.CreateSessionID メソッド
http://msdn2.microsoft.com/ja-jp/library/system.web.sessionstate.sessionidmanager.createsessionid(VS.80).aspxを使ってIDを作っているのならCreateSessionID メソッドは、ランダムに生成された数を小文字の a ~ z と数字の 0 ~ 5 から成る 24 文字の文字列にエンコードした一意のセッション識別子を返します。とか書いてあるので同じIDができる可能性もある気がします。確実に一意にするにはMSDNライブラリSessionIDManager.CreateSessionID メソッドのトのサンプルにあるように上記メソッドのオーバーライドしたクラスを作って登録すればよいのではないでしょうか。#申し訳ありませんこれ2.0だけでした。。。 -
> http://msdn2.microsoft.com/ja-jp/library/ms178582(VS.80).aspx> 期限切れのセッション ID の再生成> に「既定では、Cookie なしのセッションで使用されるセッション ID 値はリサイクルされます。」こいつは意味が違います。すでに期限の切れたセッションのIDが指定された場合にそのIDをそのまま使うかどうかです。