nginx+tomcat7+memcached集群session共享,session居然不稳定!!!

如题我做了个测试简直无语了,我用的是struts2,为了便于发现问题,我特意在jsp页面上也写了段java代码,输出sessionID和session的类容代码如下:
<%
System.out.println(session.getId());
out.println("<br> This is (TOMCAT1), SESSION ID:" + session.getId()+"<br>");
User user=(User)ActionContext.getContext().getSession().get(SessionKey.getUserSessionKey());
if(user!=null){
out.println("<br> 用户:"+ user.getUserNameEmail()+"<br>");
} else {
out.println("<br> : 用户:不存在<br>");
}
%>
这是jsp页面的,另外我在后台action中也这样:
Map<String, Object> session = ActionContext.getContext().getSession();
User user = (User)session.get(SessionKey.getUserSessionKey());

怪事就出来了,JSP可以每次正常输出session类容,而且session在集群中没一个节点的时候sessionID不会变,但是后台有时候输出Map<String, Object> session = ActionContext.getContext().getSession();的session 是空,有时候又是正常能取值,在这里郁闷的快一周了,求大侠相助啊

根据您的问题,首先您考虑下代码中session传递是否存在问题,这个我不知道在吗测试,我不太会java。其次检查tomcat中的关于session的配置,比喻session周期,生存时间等。最后检查memcachd是否正常,memached是非常好的一个技术,但是也是容易出问题的,因为内存本身就是临时快速存储,一刷新就会失效。具体的问题还是要自己检测的,查看日志。我只能告诉你我一般排错的流程,具体事情具体对待。
温馨提示:内容为网友见解,仅供参考
无其他回答

tomcat使用memcache做session共享但是session经常会变化
看下是不是这个原因 tomcat在同一个机器上,需要设置jvmRoute,并且保证在同一台机器上的唯一,如:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> 另外:memcached成功后的sessionid好像不是你那个样子的吧 memcached会加个后缀吧 This is (TOMCAT1), SESSION ID:AD71827B930...

nginx+tomcat怎么实现session保持?
通过共享存储区域,即使请求在不同tomcat节点间转发,会话信息仍可保持。实现反向代理与负载均衡配置如下:1. 在nginx中启用反向代理功能。2. 在nginx中启用负载均衡功能。3. 在tomcat中配置共享存储区域,可使用redis或memcached。这样配置,即可在nginx与tomcat间保持session一致性。为增强系统稳定性和可用性...

memcached+tomcat+nginx负载均衡session共享, 信息: Could not delete...
加一个memcached-2.5.jar

如何解决Nginx的session一致性问题
方案一:会话保持模块,即通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器,即可解决session取不到、session不一致的问题。方案二:Session共享(推荐使用),即服务器在分发请求到了一台机器的时候,会先去session缓存数据库查看是否有该用户的se...

nginx如何反向代理tomcat并且实现session保持?
首先,通过使用nginx的ip_hash指令,可以实现粘性会话。这意味着根据客户端的IP地址决定请求转发至哪个上游服务器。这样,同一IP的请求将被持续定向至同一台Tomcat实例,确保session保持。其次,采用Redis或Memcached等外部存储方案。将Session数据存储在这些系统中,所有Tomcat实例同步获取和更新Session数据。此...

使用memcached后web.xml里配置的session-timeout不起作用了
检查下你的用户登录状态判定是否有读取memcached的缓存;确定下登录信息是存储在session还是cookie;确认下配置的位置是否正确,留意下你主项目是用的nginx?还是tomcat?项目在哪里,配置应该也在那个server下

nginx部署java项目?
2.用户Session数据一定不要保存在Java应用中,重启或者crash都会导致会话失效。3.常见的用户Session存储使用Memcached集群,Redis有点搭耐乱大材小用了。4.反向代理是知档用户请求的第亩世一站,推荐nginx。5.应用部署的第一步就是关流量,保证没有请求到需要重新部署的服务实例上。部署springboot项目并...

nginx中怎样保证session 一致性
配置tomcat的conf目录下的context.xml <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:192.168.17.9:11211"sticky="false"lockingMode="auto"sessionBackupAsync="false"requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"sessionBackupTimeout="...

黑马程序员Linux运维培训怎么样?
Session入memcached、缓存项目的热点数据; Redis介绍、Redis应用场景、Redis源码安装、客户端工具使用、Redis数据结构详解、数据持久化操作(快照+AOF)、企业级案例(主从,安全限制,PHP Redis扩展,Session入Redis);MongoDB任务背景、MongoDB安装和配置、数据结构类型操作CURD、MongoDB安全设置、PHP扩展、桌面管理软件、企业级...

Java的技术架构有哪些
七层负载均衡(Nginx、haproxy),工作在Http协议下 分布式session 大家都知道,服务一般分为有状态和无状态,而分布式sessoion就是针对有状态的服务。分布式Session的几种实现方式 基于数据库的Session共享 基于resin\/tomcat web容器本身的session复制机制 基于oscache\/Redis\/memcached 进行 session 共享。基于...

相似回答
大家正在搜