Servet Spec 规定了三种session tracking机制:
1.cookie (cookie name 必须是JSESSIONID)
2.url rewrite (即给URL加上,";jessionid=EDFGHGFRTYTYUI56789", e.g.)
3.如果当前处于SSL中,则servlet容器可以直接利用SSL中内置的会话跟踪机制实现自己的session
据不完全代码跟读,tomcat5.5并没有采用第3种方案(我也无法确证),所以这里只讨论前两种:
机制1: cookie
a. 创建session时 => 服务端创建cookie,并通过http-response发到客户端
//org.apache.catalina.connector.Request. doGetSession()
... //先创建session对象
// Creating a new session cookie based on that session
if ((session != null) && (getContext() != null)
&& getContext().getCookies()) {
Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME,
session.getIdInternal()); //注意:cookie的domain未设置
configureSessionCookie(cookie); //这里会把cookie-path设成context-path,and make it secure if HTTPS is enabled
response.addCookie(cookie);
}
b.客户端发回的cookie是怎么变成session的?
//org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId()
//request被构建时会parse出session-id
request.setRequestedSessionId(scookie.getValue().toString());
//org.apache.catalina.connector.Request. doGetSession()
//request拿session时再根据session-id取到session对象
session = manager.findSession(requestedSessionId);
机制2: url rewrite方案
a. 把;jsessionid加到URL中
只有当发生redirect时,tomcat才会自动把jsessionid加上去;你自己在JSP写的链接时,必须自己把jessionid加上去,比如用(<c:url>这个jstl标签)
b. Tomcat怎么根据;jessionid找到对应的session对象?
//org.apache.catalina.connector.CoyoteAdapter.parseSessionId()
...
ByteChunk uriBC = req.requestURI().getByteChunk(); // ";jsessionid"是request-uri的一部分,不是query
int semicolon = uriBC.indexOf(match, 0, match.length(), 0); // match 就是";jsessionid"
【转载地址】
http://chenjianjx.iteye.com/blog/1145664
分享到:
相关推荐
其他服务器在处理请求时,会从Redis中获取session数据,从而实现session的跨服务器共享。 值得注意的是,这种解决方案也有一些潜在的问题,例如网络延迟可能导致性能下降,以及Redis作为单点故障,可能需要考虑高...
包含的jar包如下: commons-pool2-2.0.jar jedis-2.5.2.jar tomcat-juli-adapters.jar tomcat-juli.jar tomcat-redis-session-manager1.2.jar
标题中的"redis+tomcat实现session的jar"指的是在Tomcat服务器中利用Redis数据库来实现Web应用程序的会话(session)共享技术。Redis是一个高性能的键值存储系统,常用于缓存和分布式环境下的数据共享。在传统的Web...
"nginx+Redis+tomcat实现session共享测试代码"就是一个针对这一需求的解决方案。这个项目可能包含一个配置示例和一些测试用例,帮助开发者理解如何在Nginx反向代理服务器、Redis缓存系统以及Tomcat应用服务器之间...
linux.tomcat-session共享.redis.安装包
本示例将深入探讨如何使用Tomcat8与Redis相结合来实现session共享,这是一个高效且广泛应用的解决方案。 首先,我们需要理解什么是Session。在Web应用中,Session是用来跟踪用户状态的一种机制。当用户登录后,...
使用redis实现Tomcat集群的Session共享,压缩包中为所需要的jar文件,具体见http://blog.csdn.net/wangzi19933/article/details/54427679
Memcached-Session-Manager是解决这个问题的一个优秀解决方案,它允许我们将用户的Session数据存储在内存缓存系统——Memcached中,从而实现跨Tomcat实例的Session共享。下面将详细介绍Memcached-Session-Manager的...
本篇文章将深入探讨在Tomcat 8中通过`集群redis`实现session共享的方法。 一、session共享的重要性 在Web应用中,session是服务器端用来存储用户状态的一种机制,比如用户的登录信息、购物车内容等。在单台服务器...
本教程将详细讲解如何通过`Nginx`实现`Tomcat`集群的负载均衡,并实现`session`共享。 首先,我们要理解负载均衡的基本概念。负载均衡是通过将工作负载分散到多个计算资源,以优化资源使用、最大化吞吐量、最小化...
bản文中,我们将详细讨论使用nginx和tomcat实现session同步的方法。 首先,让我们了解什么是session同步。Session同步是指在多台服务器上共享用户会话状态,以确保用户在不同服务器上都能获取到同样的会话信息。...
总结来说,通过Nginx和memcached的结合,我们可以在多台Tomcat服务器之间实现Session的无缝共享,提高系统的可扩展性和容错性。这不仅可以优化用户体验,还可以降低运维复杂度,为大型Web应用提供稳定的支持。
本教程将详细介绍如何利用Tomcat 8或9以及Redis实现Session共享,支持Redis集群,以提高系统的可伸缩性和数据一致性。 首先,我们需要理解Session的概念。Session是服务器端用于存储用户状态的一种机制,通常在用户...
本压缩包提供的是一系列用于Tomcat实现Session共享的jar包,主要包括asm、javolution、kryo、memcached-session-manager以及相关的序列化库。 1. **ASM**: ASM是一个Java字节码操控和分析框架,主要用于动态生成类...
【标题】:“Tomcat Redis Session”指的是在Tomcat集群环境中,通过Redis来实现Session的共享与同步,以解决集群中的Session一致性问题。 【描述】:“Tomcat集群Nginx使用Redis保证Session同步”这一场景中,通常...
### 设定Tomcat中Session过期时间的三种方式 在Web开发中,Session管理是确保用户状态跟踪的重要机制之一。Tomcat作为一款广泛使用的Java应用服务器及Servlet容器,提供了多种方式来设定Session的有效时长。这有助...
在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...
标签中的“session共享”指的就是上述的会话共享需求,“nginx”是实现此功能的反向代理服务器,“tomcat7”是Java Web应用服务器,它需要与Nginx配合实现Session共享。 具体到压缩包内的文件“npp.6.1.Installer....
标题中的“tomcat8+memcached session共享”...其他实例在接收到同一用户的请求时,可以从Memcached中获取session数据,从而实现session的跨服务器共享。这种解决方案可以有效提升大型分布式系统的可扩展性和用户体验。