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

  • 質問

  • セッションIDの保存方法としてSQLサーバのASPStateにキーを保存しています。
    (sessionStateのMode:SQLServer Mode)

    ここで生成・保存されるセッションIDなのですが、有効期限内のセッションIDの中では
    それぞれユニークではあると思うのですが(アプリケーション単位にユニークな値のはず)、
    例えばタイムアウトであるセッションIDが削除された後、別のユーザのリクエストに合わせて
    セッションIDが生成された時、以前に作成されたセッションIDと同じ値が生成される、
    という事がありえるのでしょうか?

    現在、セッションIDによるユーザごとの情報をDBに格納しておいて、セッションIDが破棄されたものと
    見比べてセッションIDが存在しないユーザ情報を破棄したいのですが、
    もしかしたら同じIDが生成されることがないかと疑問に思った次第です。
    (その場合、以前に作成されたユーザが破棄されずに別のユーザの生きているデータに見えてしまう?)

    ご存知の方いらっしゃいましたら、ご教授下さいませ。

    2007年3月20日 5:40

すべての返信

  • MSDNライブラリの
    期限切れのセッション ID の再生成
    に「既定では、Cookie なしのセッションで使用されるセッション ID 値はリサイクルされます。」
    って書いてあるのを見つけました。
     
    2007年3月20日 6:21
  • IIJIMAS様 早速のご回答ありがとうございました。

    こちらの資料拝見させていただきました。
    cookielessの場合はリサイクルされるようですね。

    申し訳ございません、現状の設定しております内容に不通知項目がございました。
    cookieless="false"
    環境としては.NetFramework 1.1(開発はVS2003、サーバはWin2K)
    での実装を検討しております。

    こちらの場合にも同様の生成方法となるのでしょうか?
    その他ご回答いただければ幸いでございます。

    追伸:
    どうでもいいのですが、記述内容を確認しようとプレビューで見ると入力内容が消えてしまいますね。。。

    2007年3月20日 7:11
  •  おってぃー さんからの引用

    申し訳ございません、現状の設定しております内容に不通知項目がございました。
    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だけでした。。。
    2007年3月20日 7:23
  • IIJIMAS様

    回答いただいておりながら、返事が遅くなり大変申し訳ございません。

    やはりセッションIDは将来的にリサイクルされる、もしくは重複するものと考えておいた方が良さそうですね。
    また、回答いただいておりました、CreateSessionIDメソッドにて生成もありかとは思いましたが、こちらのVer1.1ですので、無理っぽいですね。。。

    実装方法についてはいただきました回答から仕様を検討することとします。
    ありがとうございました。

    2007年3月21日 14:11
  • http://msdn2.microsoft.com/ja-jp/library/ms178582(VS.80).aspx
    > 期限切れのセッション ID の再生成
    > に「既定では、Cookie なしのセッションで使用されるセッション ID 値はリサイクルされます。」
     
    こいつは意味が違います。
    すでに期限の切れたセッションのIDが指定された場合にそのIDをそのまま使うかどうかです。
     
    2007年3月22日 5:13