`
123003473
  • 浏览: 1064429 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Tomat如何实现session

 
阅读更多
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
分享到:
评论

相关推荐

    tomcat实现session共享

    其他服务器在处理请求时,会从Redis中获取session数据,从而实现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

    redis+tomcat实现session的jar

    标题中的"redis+tomcat实现session的jar"指的是在Tomcat服务器中利用Redis数据库来实现Web应用程序的会话(session)共享技术。Redis是一个高性能的键值存储系统,常用于缓存和分布式环境下的数据共享。在传统的Web...

    nginx+Redis+tomcat实现session共享测试代码

    "nginx+Redis+tomcat实现session共享测试代码"就是一个针对这一需求的解决方案。这个项目可能包含一个配置示例和一些测试用例,帮助开发者理解如何在Nginx反向代理服务器、Redis缓存系统以及Tomcat应用服务器之间...

    linux.redis+tomcat实现session共享

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

    Tomcat实现session共享demo

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

    Tomcat实现Session共享所需jar包

    使用redis实现Tomcat集群的Session共享,压缩包中为所需要的jar文件,具体见http://blog.csdn.net/wangzi19933/article/details/54427679

    Memcached-Session-Manager多tomcat实现session共享配置

    Memcached-Session-Manager是解决这个问题的一个优秀解决方案,它允许我们将用户的Session数据存储在内存缓存系统——Memcached中,从而实现跨Tomcat实例的Session共享。下面将详细介绍Memcached-Session-Manager的...

    集群redis实现session共享jar包之tomcat8

    本篇文章将深入探讨在Tomcat 8中通过`集群redis`实现session共享的方法。 一、session共享的重要性 在Web应用中,session是服务器端用来存储用户状态的一种机制,比如用户的登录信息、购物车内容等。在单台服务器...

    Nginx+tomcat 实现负载均衡session共享demo

    本教程将详细讲解如何通过`Nginx`实现`Tomcat`集群的负载均衡,并实现`session`共享。 首先,我们要理解负载均衡的基本概念。负载均衡是通过将工作负载分散到多个计算资源,以优化资源使用、最大化吞吐量、最小化...

    nginx+tomcat+session同步

    bản文中,我们将详细讨论使用nginx和tomcat实现session同步的方法。 首先,让我们了解什么是session同步。Session同步是指在多台服务器上共享用户会话状态,以确保用户在不同服务器上都能获取到同样的会话信息。...

    tomcat中Nginx+memcached实现session共享

    总结来说,通过Nginx和memcached的结合,我们可以在多台Tomcat服务器之间实现Session的无缝共享,提高系统的可扩展性和容错性。这不仅可以优化用户体验,还可以降低运维复杂度,为大型Web应用提供稳定的支持。

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

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

    tomcat做session共享需要的全部jar包

    本压缩包提供的是一系列用于Tomcat实现Session共享的jar包,主要包括asm、javolution、kryo、memcached-session-manager以及相关的序列化库。 1. **ASM**: ASM是一个Java字节码操控和分析框架,主要用于动态生成类...

    tomcat redis session.rar

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

    设定tomcat中session过期时间.txt

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

    tomcat集群实现session复制

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

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

    标签中的“session共享”指的就是上述的会话共享需求,“nginx”是实现此功能的反向代理服务器,“tomcat7”是Java Web应用服务器,它需要与Nginx配合实现Session共享。 具体到压缩包内的文件“npp.6.1.Installer....

    tomcat8+memcached session共享

    标题中的“tomcat8+memcached session共享”...其他实例在接收到同一用户的请求时,可以从Memcached中获取session数据,从而实现session的跨服务器共享。这种解决方案可以有效提升大型分布式系统的可扩展性和用户体验。

Global site tag (gtag.js) - Google Analytics