如何在Amazon ec2服务器上维护会话?如何防止每个请求创建会话?

时间:2014-08-26 13:33:34

标签: spring session java-ee amazon-ec2

我面临由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负载均衡器处理。

如果有任何其他要求,请发表评论。

1 个答案:

答案 0 :(得分:0)

会话问题是由于路径不同,jsessionid cookie已从请求中删除。应用程序有一个&#34; /&#34; (root)作为路径,jsessionid有一条路径&#34; /&#34;。这导致jsessionid被从请求中删除,因为服务器从未收到jsessionid,所以它一直在创建新的jsessionid。 我们通过添加参数修复了这个问题 - emptySessionPath =&#34; true&#34; - 到/etc/tomcat6/server.xml中的所有连接器。