今天开发中遇到一个很奇怪的问题,我在一个action中向session中存储了一个值,理论上在前端都应该可以取到这个值,见下:
@CrossOrigin
@RequestMapping("/")
public String index(HttpServletRequest request, String code, Map<String, Object> objs) {
HttpSession session = request.getSession();
session.setAttribute("netName", CmsCache.netName);
session.setAttribute("netUrl", CmsCache.netUrl);
if (XStringUtils.isBlank(code)) {
code = "home";
}
objs.put("code", code);
return "index";
}
首页登陆后将netName放入到session中,在前端任意地方去获取该session值
开发完成后部署到tomcat,启动,一切正常,没有问题,但是经过Nginx转发后,该session中的netName的值获取不到,只能在每个请求中分别再存储到session中一次才能获取到,见下:
@RequestMapping("/menu")
public String menu(HttpServletRequest request, Map<String, Object> map) {
HttpSession session = request.getSession();
session.setAttribute("netName", CmsCache.netName);
session.setAttribute("netUrl", CmsCache.netUrl);
在调用菜单action时候,我还需要再次存储一次netName,前端才能获取到,可能是我对nignx的转发原理和它对session的管理还不熟悉,有哪位大拿如果知道原理请赐教。
分享到:
相关推荐
下面是处理和解决Nginx session丢失问题的一些知识点和方法: 1. 了解Session机制:在Web应用中,Session用于在服务器端保存用户的会话状态。用户登录后,服务器会生成一个唯一的Session ID,通常存储在用户的...
要实现session粘滞(Session Stickiness),即同一用户的请求始终被转发到同一台服务器,Nginx可以通过cookie或者session ID来实现。比如,当用户首次访问时,Nginx可以设置一个带有特定标识的cookie,后续请求中,...
当用户从一个服务器跳转到另一个服务器时,需要保持Session数据的一致性,否则会导致用户登录状态丢失等问题。在多JVM环境中,常见的Session共享方法有Cookie Stickiness、数据库存储、Redis缓存和特定的解决方案如...
但是,由于每个Tomcat实例都有自己的Session存储,如果用户在集群中的不同服务器之间切换,会导致Session丢失。这就是需要解决的问题。 为了解决这个问题,引入了Memcached,这是一个高性能的分布式内存对象缓存...
在分布式系统中,用户会话通常存储在服务器的内存中,当用户在不同服务器间切换时,如果不进行特殊处理,会导致session丢失,影响用户体验。为了解决这个问题,我们可以使用Redis作为session存储。 Redis是一个高...
此外,还需要考虑容错机制,例如,当某个Tomcat实例宕机时,Nginx应能自动将其从负载均衡池中剔除,同时保证session数据不丢失。 总之,通过Nginx、Tomcat和Memcached的组合,我们可以构建出一个高效、可扩展且支持...
配置Redis以持久化session数据,防止服务重启丢失数据。 2. **添加session存储库**:在Tomcat服务器中,需要添加一个session存储库,通常是一个Java的HttpSessionListener,以便在session创建或销毁时与Redis进行...
Redis的配置应确保数据的持久化,以防服务器重启导致session丢失。 3. 集成session存储:在应用程序(如Java的Tomcat)中,我们需要修改session的默认存储机制,将session数据保存到Redis中。这通常可以通过使用第...
在构建高可用的Web服务系统时,经常遇到的一个挑战是如何在多台服务器之间共享用户会话...这个解决方案特别适合大型、高并发的Web应用,因为它能够无缝处理用户的登录状态,避免了因服务器切换导致的Session丢失问题。
`session`在Web应用中用于存储用户状态信息,如果在`Nginx`负载均衡下不共享,会导致用户在切换服务器时丢失`session`数据。有几种常见的解决方案: 1. **Cookie-Based**:将`session ID`存储在cookie中,每次请求...
在分布式环境中,传统的基于内存的session管理容易导致数据丢失。为了跨多个服务器共享session数据,可以使用Redis作为中央session存储。Redis是一个高性能的键值数据库,支持多种数据结构如字符串、哈希、列表等,...
Nginx作为反向代理服务器,可以很好地处理这个问题,通过特定的配置策略,将来自同一用户的请求路由到同一台后端服务器。 Nginx的配置中,我们可以通过“ip_hash”指令来实现基于客户端IP的会话保持,这样相同IP的...
当用户请求到达时,Nginx会将请求转发到相应的Tomcat实例,该实例会从memcached中读取或写入Session信息,而不是在本地存储Session。 实现步骤如下: 1. 安装和配置memcached:在所有参与Session共享的服务器上...
`标题`中提到的"使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包",实际上是指利用Redis作为中央缓存来存储和共享session数据,以解决负载均衡下的session丢失问题。 **Redis作为Session存储** Redis...
在这个架构中,Tomcat7主要负责执行Java应用的业务逻辑,处理由Nginx转发过来的请求,并返回响应给Nginx。 **Redis** Redis是一款开源的、高性能的键值存储系统,常用于实现数据缓存。在Web应用中,由于HTTP协议的...
为了解决这个问题,我们需要添加一个名为 `jvmroute` 的模块,这个模块允许 Nginx 将特定的 JSESSIONID 传递给 Tomcat,从而实现 Session 共享。以下是添加和编译该模块的步骤: 1. 下载 `nginx-upstream-jvm-route...
然而,当涉及到用户登录状态或购物车等需要持久化Session的数据时,简单地在多个服务器之间分发请求可能会导致Session丢失,因为每个服务器无法访问其他服务器上的Session数据。为解决这个问题,我们可以引入Redis...
然而,在这种配置中,`session` 共享成为一个关键问题,因为用户在与集群中的不同 `tomcat` 实例交互时,需要保持会话状态的一致性。本篇将深入探讨如何通过 `nginx` 和 `tomcat` 集群实现 `session` 共享。 ### 1....