4

によって返される値は、HttpSession.getId()時間の経過とともに一意であることが保証されていますか?それとも、すべてのアクティブなセッションの中でのみ一意ですか?

つまり、セッションログエントリ(どのユーザーがいつ、どのくらいの時間ログインしたか)のキーとして使用できますか?

実装固有の場合getId(J2EE仕様ではこの問題については言及されていないため、私は推測しています)、Google App Engineでどのように扱われますか?

4

3 に答える 3

3

私の知る限り、Web サーバーを再起動しない限り、セッション ID は一意です。したがって、セッション ID は、Web サーバーのライフサイクル全体で一意です。

Apache Tomcat では、 ManagerBase.generateSessionId()を調べて、ID の生成方法を確認できます。ただし、Tomcat では、生成された ID は同じコンテキスト内でのみ一意であることに注意してください。

役に立ったことを願っています

于 2010-12-07T14:35:22.980 に答える
2

はい、実装に依存します。任意のインターフェースの任意のメソッドの場合と同様:-)。ID が一意であることを確認するのは、プログラマの責任です。

ManagerBase.createSession(java.lang.String)をUUIDと組み合わせて使用​​すると、ID が一意になることが 100% 確実になります。

于 2010-12-07T14:35:51.483 に答える
1

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 は時間の経過とともに一意です。

于 2011-07-09T18:30:12.920 に答える