`

cookie与seesion的关系及集群服务器下的共享问题

 
阅读更多

cookie与seesion的关系为什么会有cookie呢,大家都知道,http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过 SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为 JSESSIONID的输出cookie,我们叫做session cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6之类的字符串。

基于数据库的Session共享

首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普遍在使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。

 

3. 基于Cookie的Session共享

这个方案我们可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式,统一种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现用户的Cookie化Session 在多服务间的共享访问。

这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器。

 

4. 基于Memcache的Session共享

Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势,目前本人所经历的项目达到2000/秒 平均查询,并且服务器CPU消耗依然不到10%。

另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力。

分享到:
评论

相关推荐

    PHP实现多服务器session共享之memcache共享.rar

    Session是Web应用程序中用于跟踪用户状态的一种机制,它存储在服务器端,与传统的基于cookie的客户端存储方式相比,更安全且能存储大量数据。然而,当一个网站部署在多台服务器上时,单个服务器上的session无法在...

    tomcat集群session共享解决方案

    5. **Spring Session**:Spring框架提供了一个名为Spring Session的模块,它可以与各种后端存储(如Redis、MongoDB等)集成,实现跨服务器的session共享。Spring Session提供了API和注解,方便在Spring MVC或Spring ...

    tomcat8集群实现session共享,内含session共享包

    总之,实现Tomcat8集群中的Session共享是一个涉及到服务器配置、网络通信和数据存储的复杂过程。正确配置和选择合适的共享策略是确保Web应用在高并发环境下仍能提供良好用户体验的关键。在使用提供的"session共享包...

    nginx+tomcat+redis服务器集群session共享

    在构建大型分布式应用时,服务器集群的session共享是至关重要的,因为这关乎到用户状态的一致性和用户体验。本文将深入探讨如何使用nginx、tomcat和redis来实现这一目标。 首先,我们来理解这三个组件的基本角色: ...

    cookie 和 session 保存的异同

    在集群环境中的共享和管理,Cookie本身是可以在所有服务器之间共享的,因为它们在客户端,但Session由于存储在服务器,所以在多台服务器的集群中,需要有一种机制来同步Session数据。这可以通过以下几种方式实现: ...

    redis 集群共享Session

    而Redis作为分布式缓存,可以跨服务器共享Session,解决了这些问题。 4. **Redis集群共享Session的实现** - **配置Redis集群**:首先,我们需要部署一个稳定的Redis集群,确保高可用性和数据一致性。这通常包括多...

    Tomcat7集群实现共享session,已配置好。

    标题 "Tomcat7集群实现共享session,已配置好" 暗示了这是一个关于在Tomcat7服务器集群环境中实现session共享的配置实例。在多台Tomcat服务器组成的集群中,session共享是解决用户会话在不同服务器之间无缝切换的...

    tomcat8集群session共享(redis处理)

    在单个服务器环境下,Session存储在服务器内存中,但在集群环境中,由于每个服务器都有自己的内存空间,无法直接共享Session。 为了解决这个问题,我们可以利用Redis这种高性能的Key-Value数据库作为Session的中央...

    多台服务器之间共享session

    具体的实现细节和技术选型需要结合项目实际情况来确定,例如《多台服务器共享SESSION - 学在囧途的日志 - 网易博客》和《多服务器共享session的方法》这两篇文章可能提供了更深入的实践案例和技术解析,值得进一步...

    Tomcat集群Session共享

    然而,Tomcat集群中的Session共享成为一个关键问题,因为每个Tomcat实例都有独立的内存空间,不能直接共享Session数据。以下是几种常见的Tomcat集群Session共享方案,包括其实现过程、优缺点和可能遇到的问题。 1. ...

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

    在分布式系统中,Session共享是实现用户会话一致性的重要手段,特别是在集群环境下。"集群redis实现session共享jar包之tomcat7"这个主题涉及到的是如何在基于Tomcat 7的Web应用集群中,利用Redis作为中央存储来共享...

    nginx tomcat memcached 集群 session共享

    这里我们讨论的主题是如何通过Nginx、Tomcat和Memcached来实现集群环境下的session共享。Nginx作为反向代理服务器,负责负载均衡,Tomcat作为应用服务器运行Java Web应用程序,而Memcached则作为分布式内存缓存系统...

    web项目集群时共享session方案实践。 war包

    在分布式系统环境中,Web项目的集群部署能够提供高可用性和负载均衡,但同时也引入了一个问题:如何在多个服务器之间共享Session信息。"web项目集群时共享session方案实践"的主题旨在探讨和解决这一挑战。以下是关于...

    nginx+tomcat集群的jar包 session共享

    然而,在这种配置中,`session` 共享成为一个关键问题,因为用户在与集群中的不同 `tomcat` 实例交互时,需要保持会话状态的一致性。本篇将深入探讨如何通过 `nginx` 和 `tomcat` 集群实现 `session` 共享。 ### 1....

    分布式服务集群下实现session共享解决方案.docx

    5. Terracotta服务器共享:提供集中式的session管理,但配置相对复杂。 6. Memcached:使用内存缓存系统存储session,性能优于数据库,但数据序列化影响效率,且服务器故障会导致session丢失。 7. Redis:内存...

    使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包

    `标题`中提到的"使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包",实际上是指利用Redis作为中央缓存来存储和共享session数据,以解决负载均衡下的session丢失问题。 **Redis作为Session存储** Redis...

    Tomcat 6 集群配置 session 共享 同一台机器

    6. **测试与监控**:部署后,需要通过发送请求并检查session的存活状态,确保session在集群中的正确共享。同时,监控每个节点的状态和通信效率,以便及时发现并解决问题。 在实际应用中,由于session共享涉及数据的...

    SpringSession同时支持Cookie和header策略

    这个工具扩展了Spring框架的功能,使得在集群服务器之间共享session数据变得简单。本文将深入探讨SpringSession如何支持Cookie和header策略,并解析`CookieHeaderHttpSessionStrategy.java`这个文件中的关键概念和...

    web服务器集群(多台web服务器)session同步、共享的3种解决方法

    在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,一个登录用户,一会是登录状态,一会又不是登录状态。...

    Nginx 集群 tomcat session 共享配置有源码

    然而,当多个Tomcat实例构成集群时,会面临一个问题:用户session的共享。Session是Web应用程序用来跟踪用户状态的重要机制,如果不能在集群间共享,用户在切换服务器时可能会失去登录状态,导致用户体验下降。为...

Global site tag (gtag.js) - Google Analytics