`
rubyeye
  • 浏览: 27366 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

会话cookie和持久化cookie实现session机制

阅读更多
   当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3(java服务器)信息,此信息是服务器随机生成的,放在服务器内存里,为了标识唯一的客户端用户,内容不会重复,这就是sessionid.
   当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一个IE将不能共享这个sessionid;而Firefox进程间可以共享.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话.
   可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才释放内存).
   上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等.
   如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就是URL重写只能实现会话cookie的效果,持久会话实现不了.
分享到:
评论
8 楼 plmmmmlq 2014-05-16  
Cookie是客户端技术,Session中服务端技术,但是Session需要Cookie的支持。
7 楼 sito 2012-05-31  
上面有朋友说不存在两种cookie,大家去查查外文资料或许可以得到更精确的结论。

我只说下我在做一个测试的结果。主要是验证如何解决同一机器同名用户同时登录web app,并且是当作两个人在使用,如何作区分标识。

3台机器:apache + 2 tomcat做一个集群环境

用IE6访问负载ip,负载因子是1:1

servlet干的事是写会话cookie(只做一次)、读cookie,每个浏览器窗口是一个独立的进程,一般情况,这个窗口都会指向某个集群node A,不断刷新(相当于另一次请求)这时session id当然是一样的,cookie的value也会是一样的。这时将这个集群node A停止,请求会被指向另一个node B,这时显示的session id变了,但cookie的值还是不变的。

找到了方法,用会话cookie去区分标识用户!!

如果写的持久cookie,不管开多少个窗口,读的值都是一样的,因为是读的磁盘,磁盘上只有一个这样的cookie
6 楼 seven_cuit 2010-12-01  
很有帮助,另外想请教一下 rubyeye, 如果Server端没有使用Session,以Java Web Server为例,那么第一次访问网站时会不会从Server端返回 jsessionid?
5 楼 zhangzhanliang 2010-04-21  
某网络在访问服务器后,可能会自动更换本地的IP,这个时候的本地存储的 sessionID 与服务器存储的 sessionID,是不是会有一方发生变化呢?
4 楼 he_lux 2009-02-18  
我觉得把COOKIE分为会话COOKIE和持久COOKIE不太妥当,这样让人感觉有两种COOKIE。
在TOMCAT里,SESSIONID存到COOKIE里后,有这么一句:cookie.setMaxAge(-1);浏览器关闭后COOKIE就会被删除。
所以应该没有两种COOKIE,COOKIE只有一种,javax.servlet.http.Cookie。所谓的这两种COOKIE,实际上应该是COOKIE的setMaxAge的结果不同而已。
3 楼 he_lux 2009-02-12  
第一次访问一个网站,网站服务器会在响应头里加上Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3信息,客户端收到这个信息后,就把SEESIONID存在自己的COOKIE里面,然后把COOKIE内容存到浏览器进程的内存里

这样理解对吗?
2 楼 smile_juan 2009-02-09  
不是,在服务器端设置过期时间后就是持久cookie了
1 楼 he_lux 2009-02-06  
谢谢楼主分享,让我理解到了什么是会话COOKIE和持久COOKIE。

但有个疑问,浏览器使用会话COOKIE还是持久COOKIE,是在浏览器里设置么?

相关推荐

    cookie机制和session机制的区别

    临时Cookie会在浏览器关闭后自动删除,而持久化Cookie则会根据设定的有效期存在一段时间。 #### Session机制 Session是在服务器端维护的一种会话管理机制,用于跟踪用户在一个会话过程中的状态。当一个用户连接到...

    Cookie机制和Session机制

    ### Cookie机制和Session机制 #### 一、基本概念与背景 在现代Web应用中,为了实现用户认证、个性化设置等功能,通常需要在客户端与服务器之间维持一段时间内的状态信息。然而,HTTP协议本质上是无状态的,这意味...

    经典收藏Cookie和Session

    通过以上内容,我们可以清楚地了解到Cookie与Session的基本概念及其区别,同时对于会话Cookie与持久Cookie的不同也有了更深入的理解。在实际应用中,合理选择和使用这两种机制可以帮助开发者更好地管理用户的会话...

    Servlet会话机制(cookie and session)

    每次用户请求,服务器根据Session ID找到对应的Session,从而获取购物车状态,实现状态的持久化。 **三、Cookie与Session的比较** 1. **安全性**:Session比Cookie更安全,因为数据存储在服务器端,不会暴露给...

    cookie机制和session机制的区别.

    这种方式适用于需要持久化存储少量数据的场景。 - **Session**:是一种服务器端存储技术,服务器为每个用户创建一个独立的会话(Session),并在服务器端保存用户的会话数据。客户端通过某种方式(通常是Cookie)...

    Tomcat_Session的持久化

    下面详细讲解 Tomcat_Session 的持久化原理和实现机制。 一、Session 的使用 Session 是一种用来跟踪用户状态的机制。Servlet 容器通过在客户端浏览器中保存一个 Session ID 来跟踪 Session。调用 session.getID()...

    Cookie、Session和Token三者的区别及使用

    - **会话Cookie (Session Cookie)**: 不设定过期时间,仅在用户会话期间有效。 - **持久Cookie (Persistent Cookie)**: 设定了过期时间,在该时间内无论浏览器是否重启都会保持有效。 **用途**: Cookie常用于个性化...

    session与cookie的区别和联系?

    如果未设置过期时间,则默认为会话Cookie,在用户关闭浏览器后即被删除。 - **大小限制**:每个Cookie的大小通常不超过4KB。 - **Session**:Session是服务器为了跟踪用户的会话而创建的一个对象,用来存储特定...

    cookie 和 session 保存的异同

    Cookie 和 Session 是两种常见的用户身份验证和会话管理机制,它们在Web开发中扮演着重要角色,用于跟踪用户的在线状态和存储用户数据。下面将详细阐述它们的异同以及如何在集群环境中进行共享。 首先,Cookie 是一...

    flask-session-cookie-manager

    在Web开发中,session cookie是服务器用来跟踪用户状态的一种方式,特别是在无状态的HTTP协议上实现会话持久化。这个工具可能提供创建、读取、更新和删除cookie的功能,帮助开发者更方便地处理用户的登录状态、个性...

    session 和cookie 区别

    会话cookie与持久cookie的主要区别在于它们的有效期: - **会话cookie**:没有设置过期时间,其生命周期仅限于当前的浏览器会话。一旦浏览器关闭,这类cookie将被自动清除。 - **持久cookie**:通过设置过期时间(如...

    javaweb之cookie和session的应用

    在Java Web开发中,Cookie和Session是两种非常重要的会话管理技术,它们主要用于跟踪和管理用户的状态信息。本文将深入探讨Cookie和Session的工作原理、应用场景以及如何在Java Web项目中进行有效利用。 **Cookie**...

    session的跟踪机制

    每当用户访问某个网站时,服务器可以设置或读取Cookie中的内容,从而实现用户信息的持久化存储。Cookie的数据量较小(通常限制在4KB以内),并且随着每一次HTTP请求自动发送到服务器。 - **优点**:使用简单方便...

    对session和cookie的一些理解

    有几种类型的Cookie,包括会话Cookie(Session Cookie)和持久化Cookie。会话Cookie在浏览器关闭后消失,而持久化Cookie则可以设定过期时间,即使浏览器关闭,再次打开时依然存在。 Session,另一方面,是在服务器...

    Cookie与Session机制

    3. **存储**:Session数据通常存储在内存中,服务器会定期将活跃Session持久化到硬盘,以防服务器重启导致数据丢失。 4. **生命周期**:Session有一个预设的超时时间,超过这个时间未收到客户端的请求,服务器会...

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    以上就是使用`SessionListener`、持久化`Session`和`Springmvc拦截器`实现单点登录的基本原理和实现步骤。通过这样的设计,可以有效地提升用户体验,同时确保系统的安全性。在实际项目中,还需要根据具体需求进行...

    cookie机制实现登陆、退出

    在实际开发中,还会使用Session和Token等技术来配合Cookie实现更安全的身份验证。Session存储在服务器端,而Token则通常用于无状态的API交互,它们都与Cookie结合使用,以提高系统的安全性。 综上所述,Cookie机制...

    分布式架构下的会话追踪实践【基于Cookie和Redis实现】

    - 对于大容量的会话数据,可以考虑定期将部分不活跃的会话数据持久化到磁盘,以节省内存资源。 通过以上步骤,我们可以实现一个高效的分布式会话追踪系统,既能保证用户状态的连续性,又能适应大规模的并发请求。...

    session与cookie

    **二、会话Cookie与持久Cookie的区别** 1. **会话Cookie**:若未设置过期时间,Cookie生命周期仅限于当前浏览器会话,关闭浏览器窗口后即消失,不保存在硬盘上。 2. **持久Cookie**:设置过期时间的Cookie会被保存...

Global site tag (gtag.js) - Google Analytics