【发布时间】:2010-09-10 02:05:42
【问题描述】:
Tomcat(此处为版本 5)将会话信息存储在内存中。集群时,此信息会定期广播到集群中的其他服务器以保持同步。您可以使用数据库存储使会话持久化,但此信息也只是定期写入,并且仅真正用于故障恢复,而不是实际替换内存中的会话。
如果您不想使用粘性会话(很遗憾,我们的配置不允许这样做),则会引发会话不同步的问题。
在其他语言中,Web 框架倾向于允许您将数据库用作主要会话存储。虽然这引入了潜在的扩展问题,但它确实使会话管理非常简单。我想知道是否有办法让tomcat以这种方式使用数据库进行会话(从技术上讲,这也将消除对tomcat server.xml中任何集群配置的需要)。
【问题讨论】:
-
如果您不使用粘性会话,那么您将违反 servlet 规范中的要求之一 - 对同一会话的请求由同一 JVM 提供。 Tomcat 使这非常困难。将会话保存在数据库中可能会导致丢失更新问题。