我面临由Amazon EC2服务器引起的非常戏剧性的行为。我在Amazon ec2服务器上部署了一个Web应用程序,该服务器是使用Spring和Java开发的。对于每个请求,都会在此处创建新会话。我有一个场景,我需要将一些数据存储到httpsession对象中,但由于每次丢失数据时会话都会发生变化。
您的回答是可敬的。 感谢。
如果忘了这里要提及的事情并且需要理解,请添加评论。
让我完整地解释一下我的情景:
我有两台安装了apache的机器,并使用mod_jk连接器与tomcat服务器集成,例如。 app0和app1机器,这两台机器都是ec2服务器的负载均衡器请求的。要为每个服务器实例复制会话,我使用了DeltaManager jdbc存储设置,因为ec2不支持SimpleTCPCluster设置。
DeltaManger代码:
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="20"
processExpiresFrequency="1">
<Store className="org.apache.catalina.session.JDBCStore"
connectionURL="jdbc:mysql://localhost:3306/tomcat"
driverName="com.mysql.jdbc.Driver"
connectionName="username"
connectionPassword="password"
sessionIdCol="session_id"
sessionValidCol="valid_session"
sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access"
sessionTable="sessions"
sessionAppCol="app_name"
sessionDataCol="session_data"
/>
</Manager>
这一切在我的本地机器上工作正常,但在生产上失败,因为有两台机器,它们由ec2负载均衡器处理。
如果有任何其他要求,请发表评论。
答案 0 :(得分:0)
会话问题是由于路径不同,jsessionid cookie已从请求中删除。应用程序有一个&#34; /&#34; (root)作为路径,jsessionid有一条路径&#34; /&#34;。这导致jsessionid被从请求中删除,因为服务器从未收到jsessionid,所以它一直在创建新的jsessionid。 我们通过添加参数修复了这个问题 - emptySessionPath =&#34; true&#34; - 到/etc/tomcat6/server.xml中的所有连接器。