HttpSession.getId()
返回的值是否保证在时间上是唯一的 - 或者只在所有活动会话中唯一?
换句话说,我可以将它用作会话日志条目的密钥(用户登录的时间和持续时间)?
如果getId
是特定于实现的(我猜它是,因为J2EE规范对这个问题没有提及),那么它在Google App Engine上是如何处理的?
答案 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在时间上是唯一的。