session丢失,因为每次刷新都重新分发tomcat,所有session丢失;
1,如果使用的是Tengine,可以使用粘滞:
session_sticky
来解决
原理:用户访问网站分发到哪个tomcat,下次刷新分发,继续访问上次的tomcat
在Tengine的conf/nginx.conf
#insert + indirect模式:
upstream test {
session_sticky cookie=uid fallback=on path=/ mode=insert option=indirect;
server 127.0.0.1:8080;
}
server {
location / {
#在insert + indirect模式或者prefix模式下需要配置session_sticky_hide_cookie
#这种模式不会将保持会话使用的cookie传给后端服务,让保持会话的cookie对后端透明
session_sticky_hide_cookie upstream=test;
proxy_pass http://test;
}
}
service nginx restart 重启nginx生效
2,memcached缓存方案:
yum -y install memcached 安装memcached
service memcached start 安装完成之后启动
yum -y install telnet 安装telnet,用来测试memcached端口是否开通
telnet 192.168.188.3 11211
检测11211端口是否开通
quit 退出
tomcat 配置名称和 session 一致性配置:(其他服务tomcat也需要配置)
---------------------配置tomcat开始--------------------------------------------------
将 jar 包拷贝到 tomcat 的 lib 下

在 tomcat 的 server.xml 中配置 jvmRoute
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
在 context.xml 的 Context 配置 Manager 多个memcached的IP用空格分开
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:
192.168.188.3:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
---------------------配置tomcat结束--------------------------------------------------
为了方便查看可以修改几个tomcat的index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF- 8"%> SessionID:<%=session.getId()%>
SessionIP:<%=request.getServerName()%>
<h1>tomcat1</h1>
然后重新启动tomcat,刷新页面