HttpSession.getId()有多独特?

时间:2010-12-07 14:26:57

标签: java google-app-engine session servlets httpsession

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

换句话说,我可以将它用作会话日志条目的密钥(用户登录的时间和持续时间)?

如果getId是特定于实现的(我猜它是,因为J2EE规范对这个问题没有提及),那么它在Google App Engine上是如何处理的?

3 个答案:

答案 0 :(得分:3)

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

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

希望有所帮助

答案 1 :(得分:2)

是的,它取决于implementation。因为它适用于任何界面中的任何方法:-)。程序员应该确保id是唯一的。

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

答案 2 :(得分:1)

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