4

是否保证返回的值HttpSession.getId()在时间上是唯一的 - 还是仅在所有活动会话中唯一?

换句话说,我可以将它用作会话日志条目的键(哪个用户登录的时间和时间)?

如果getId是特定于实现的(我猜是,因为 J2EE 规范对这个问题保持沉默),它在 Google App Engine 上是如何处理的?

4

3 回答 3

3

据我所知,只要您没有重新启动网络服务器,会话 ID 才是唯一的。因此,在您的网络服务器的生命周期中,会话 ID 在时间上是唯一的。

在 Apache Tomcat 中,您可以查看ManagerBase.generateSessionId()以了解如何生成 ID。但请注意,在 Tomcat 中,生成的 ID 仅在同一上下文中是唯一的。

希望有帮助

于 2010-12-07T14:35:22.980 回答
2

是的,这取决于实施。就像任何接口中的任何方法一样:-)。由程序员来确保 id 是唯一的。

如果您将ManagerBase.createSession(java.lang.String)UUID结合使用,则您 100% 确定您的 id 将是唯一的。

于 2010-12-07T14:35:51.483 回答
1

问题是关于 Google App Engine。GAE 基于 Jetty 而不是 Tomcat,所以你不能使用 ManagerBase.createSession(java.lang.String)。会话在 Datastore(或 memcached)中分布和持久化。它通过 cookie(称为 JESSSONID)进行跟踪,该 cookie 由 servlet 容器管理。在 Datastore 中有类型为 _ah_SESSION 的实体,其 id 是会话 id,前缀为“_ahs”。目前 _ah_SESSION 实体不会自动删除。所以答案是:目前GAE 上的会话 id 在时间上是唯一的

于 2011-07-09T18:30:12.920 回答