一尘不染

Tomcat唯一SessionId

tomcat

有什么方法可以配置(xml)tomcat(6.x)生成唯一的SessionId。(不扩展ManagerBase / StandardManager)。


阅读 459

收藏
2020-06-16

共1个答案

一尘不染

我正在数据库表中捕获用户登录详细信息,会话ID在具有唯一约束的列中,并且正在获得唯一约束异常

您不应将Tomcat生成的会话ID作为唯一约束存储在数据库中。这是没有道理的。Tomcat的会话ID仅在所有现有活动会话中都是唯一的。Servlet规范不禁止在数月或数年后的某个时间点将过期会话的ID重新用于新会话。使用固定长度的32个字符的十六进制字符串作为会话ID,所有可能的ID都不是“无限”的。您无法阻止它在某个时候被其他客户端重用。

我不明白为什么您会在数据库生存期中长时间存储Tomcat生成的会话ID。每当过期时,您都应该将其从数据库中删除。或者您应该以不同的方式解决您的问题。由于您未说明此“解决方案”背后的功能要求,因此我无法给出更合适的答案。但是,这里有一些提示:

  • 反之亦然:在数据库中插入或从数据库中选择必要的数据,获取数据库生成的ID,并将其存储为的属性HttpSession。例如,已登录的用户ID,或仅是整个User对象。

  • 或者,如果它需要延长会话的默认生存期,例如“记住我”选项,那么您应该自己生成一个UUID(并测试它是否在数据库中尚不存在),然后在单独的cookie中使用它。

2020-06-16