によって返される値は、HttpSession.getId()
時間の経過とともに一意であることが保証されていますか?それとも、すべてのアクティブなセッションの中でのみ一意ですか?
つまり、セッションログエントリ(どのユーザーがいつ、どのくらいの時間ログインしたか)のキーとして使用できますか?
実装固有の場合getId
(J2EE仕様ではこの問題については言及されていないため、私は推測しています)、Google App Engineでどのように扱われますか?
によって返される値は、HttpSession.getId()
時間の経過とともに一意であることが保証されていますか?それとも、すべてのアクティブなセッションの中でのみ一意ですか?
つまり、セッションログエントリ(どのユーザーがいつ、どのくらいの時間ログインしたか)のキーとして使用できますか?
実装固有の場合getId
(J2EE仕様ではこの問題については言及されていないため、私は推測しています)、Google App Engineでどのように扱われますか?
私の知る限り、Web サーバーを再起動しない限り、セッション ID は一意です。したがって、セッション ID は、Web サーバーのライフサイクル全体で一意です。
Apache Tomcat では、 ManagerBase.generateSessionId()を調べて、ID の生成方法を確認できます。ただし、Tomcat では、生成された ID は同じコンテキスト内でのみ一意であることに注意してください。
役に立ったことを願っています
はい、実装に依存します。任意のインターフェースの任意のメソッドの場合と同様:-)。ID が一意であることを確認するのは、プログラマの責任です。
ManagerBase.createSession(java.lang.String)をUUIDと組み合わせて使用すると、ID が一意になることが 100% 確実になります。
Google App Engine についての質問です。GAE は Tomcat ではなく Jetty に基づいているため、ManagerBase.createSession(java.lang.String) は使用できません。セッションは分散され、Datastore (または memcached) に保持されます。これは、サーブレット コンテナーによって管理される Cookie (JSESSONID と呼ばれる) によって追跡されます。Datastore には、「_ahs」で始まるセッション ID である ID を持つ種類 _ah_SESSION のエンティティがあります。現在、_ah_SESSION エンティティは自動的に削除されません。答えは次のとおりです。現在、GAE のセッション ID は時間の経過とともに一意です。