`
sizhefang
  • 浏览: 227030 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Tomcat session 实现

阅读更多
   今天看到rails 的session 实现方式时,突然对Tomcat的session 实现方式也产生了好奇心.

  一般会认为客户端在第一次访问Web容器时,容器会创建一个Session,这个Session被添加到一个Map 里,由容器负责维护。这个大家都很清楚,也很容易理解。但是关键是如何与客户端浏览器交换这个SessionId 的信息,很多书都提到有三种方式:cookie、URL重写、和隐藏表单,后两种是类似的。

如果是第一种,那么Sessionid被关联到一个浏览器一关闭就失效的cookie里,然后客户端浏览器每次用这个cookie来标示会话。注意这些都是Web容器替我们完成的。

如果是URL重写,则每个请求字符串后面会被附加如;jsessionid=XXXXXXXXX这样的标示,用于标示会话。

  容器何时决定使用哪一种方法?

我找了一个Winsock Expert的软件来监测IE 浏览器发送和接收的信息,IE的版本为6.0,Tomcat的版本为5.0.19,结果如下:当IE浏览器向Tomcat第一次发出请求时,
不包含任何Cookie信息,当然这是第一次访问这个站点。为了比对Cookie的内容,我在访问的index.jsp页面中使用了response.setCookie向响应放了一个名为newCookie的Cookie。

最后监测的结果如下,除了用户自定义的newCookie之外,还有一个名为JSESSIONID的Cookie被加入了响应。

在接下来的请求中,都包含了JSESSIONID这个Cookie,在请求内容中能清楚的看到这一点:

但是,如果用request.getCookies是无法看到JSESSIONID这个Cookie的,只能看到我自定义的那个newCookie,JSESSIONID这个Cookie被Tomcat隐藏起来了,对于编程人员来说,是不可见的(我无法使用${cookie.JSESSIONID.name}或是${cookie.JSESSIONID.value}来检查它的名称和值,虽然这些对我来说都是已知的)。

得出如下结论:如果客户端禁用cookie,就用jsessionid,它的内容不写在硬盘,而是被ie缓存在内存了,即便客户端禁用了cookie,jsessionid还是存在的,这样一来的话,服务器就可以知道来自客户端的请求是不是来自同一个流览器了.

分享到:
评论
4 楼 coconut_zhang 2012-03-09  
请教您一个问题,我在请求串后面加上jsessionid,但后台程序得不到,还是创建了session。开始我怀疑是cookies的问题,把cookies禁用后,还是不行,是不是tomcat版本的问题还是配置的问题,请教一下。我的tomcat的版本是apache-tomcat-6.0.16
3 楼 YangJianDong 2009-05-27  
文字
jj
2 楼 sizhefang 2008-06-02  
你的认识是对的,我在写这篇blog后,经过查阅资料意识到自己之前的认识有点偏差,但忘记改相应的blog了
1 楼 rubyeye 2008-05-23  
你这里有个误解,当禁用cookie后,浏览器可以接受JSESSIONID,放到浏览器内存里,但是浏览器不能将这个JSESSIONID放在请求头里发送给服务器,所以实现不了会话,用户禁用cookie后,只能用你说的后两种方法

相关推荐

    nginx实现多个tomcat7直接session共享所需jar包

    标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...

    tomcat实现session共享

    而`tomcat-redis-session-manager-1.2-tomcat-7.jar`则是Tomcat 7的Redis session manager实现。 以下是实现步骤: 1. **配置Redis服务器**:确保你有一个运行中的Redis服务器,可以是本地或者远程。配置好服务器...

    tomcat8实现session共享jar包

    此压缩包为tomcat8利用redis实现session共享所需要的jar包,包含(commons-pool2-2.6.0.jar、jedis-2.9.0.jar、tomcat-redis-session-manager.jar)直接将三个jar包复制Tomcat目录lib下面,在修改conf下context.xml...

    设定tomcat中session过期时间.txt

    ### 设定Tomcat中Session过期时间的三种方式 在Web开发中,Session管理是确保用户状态跟踪的重要机制之一。Tomcat作为一款广泛使用的Java应用服务器及Servlet容器,提供了多种方式来设定Session的有效时长。这有助...

    Tomcat8(Tomcat9)+redis实现Session共享(支持Redis集群)

    本教程将详细介绍如何利用Tomcat 8或9以及Redis实现Session共享,支持Redis集群,以提高系统的可伸缩性和数据一致性。 首先,我们需要理解Session的概念。Session是服务器端用于存储用户状态的一种机制,通常在用户...

    nginx+tomcat shiro实现多tomcat下session共享

    "nginx+tomcat shiro实现多tomcat下session共享"这一主题,就是探讨在这样的架构中,如何有效管理和共享session。 1. **Nginx的作用**: Nginx是一个高性能的HTTP和反向代理服务器,常用于负载均衡,可以将用户的...

    linux.redis+tomcat实现session共享

    linux.tomcat-session共享.redis.安装包

    nginx+Redis+tomcat实现session共享jar

    包含的jar包如下: commons-pool2-2.0.jar jedis-2.5.2.jar tomcat-juli-adapters.jar tomcat-juli.jar tomcat-redis-session-manager1.2.jar

    tomcat集群实现session复制

    在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...

    tomcat session存到mencache

    在IT行业中,Tomcat是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web部分,包括Servlet和JSP规范。在处理用户会话时,Tomcat默认使用基于内存的session管理,但这可能导致在高并发场景下session数据丢失...

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    本篇文章将探讨如何利用Redis、Tomcat和Nginx来实现Session共享,以便在分布式环境中保持用户状态的一致性。 首先,让我们了解一下Session的概念。Session是Web服务器用来跟踪用户状态的一种机制。当用户登录后,...

    一台xp机器实现apache+tomcat session复制.docx

    【Apache + Tomcat Session 复制】:在一台运行Windows XP的计算机上,要实现Apache HTTP Server和Tomcat的负载均衡以及Session复制,通常需要使用Apache的mod_jk模块。这个过程涉及到Apache、Tomcat的配置,以及mod...

    tomcat8+memcached session共享

    2. `memcached-session-manager-1.8.3.jar`:这个库提供了session管理器,实现了将Tomcat的session数据存储到Memcached的能力。 3. `kryo-1.04.jar` 和 `kryo-serializers-0.11.jar`:Kryo是一个快速、高效的序列化...

    Tomcat实现session共享demo

    本示例将深入探讨如何使用Tomcat8与Redis相结合来实现session共享,这是一个高效且广泛应用的解决方案。 首先,我们需要理解什么是Session。在Web应用中,Session是用来跟踪用户状态的一种机制。当用户登录后,...

    tomcat-redis-session-manager实现session共享 配置文件

    "tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的Session共享。本篇文章将深入探讨这个话题,包括它的原理、配置以及实际应用。 **一、Session...

    tomcat redis session.rar

    【标题】:“Tomcat Redis Session”指的是在Tomcat集群环境中,通过Redis来实现Session的共享与同步,以解决集群中的Session一致性问题。 【描述】:“Tomcat集群Nginx使用Redis保证Session同步”这一场景中,通常...

    tomcat7集群实现session共享

    当我们谈论“Tomcat7集群实现session共享”时,我们关注的是如何在多个Tomcat实例之间有效地同步用户会话信息,以便在集群环境中提供高可用性和负载均衡。 首先,理解session共享的重要性。在Web应用中,session是...

    基于redis实现tomcat session共享与集群

    本文将深入探讨如何利用Redis来实现Tomcat Session的共享,并构建一个高可用的集群。 首先,理解Session的基本概念。Session是Web服务器为每个客户端创建的一种存储机制,用于存储用户状态信息,如登录状态、购物车...

    tomcat-redis-session-manager

    《Tomcat Redis Session Manager:实现高效会话管理》 在Web应用开发中,session管理是不可或缺的一部分,它用于存储用户状态信息,确保用户在不同页面间保持登录状态。然而,随着分布式系统的普及,单个服务器的...

    tomcat容器 实现session共享案例

    本案例主要探讨了如何在Tomcat7容器中,基于Java7环境,利用Redis来实现在多个服务器间Session数据的共享。这有助于提升应用的可扩展性和高可用性。 首先,我们来理解一下Session的基本概念。Session是Web服务器为...

Global site tag (gtag.js) - Google Analytics