理解Session与Cookie

写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益。

=====正文开始========

  在web的世界里,客户端通过HTTP Request向服务器发送请求,服务器通过HTTP Response响应用户请求,可是由于HTTP协议是无状态的,导致客户端和服务器端每次就像喝了孟婆汤一样,彼此相忘,导致每一次客户端的HTTP Request,服务器端都会认为是一次新的请求。对于一些简单的业务逻辑,彼此相忘,互不记得,没什么大碍,可是有的时候,就需要服务器端记住客户端,保持客户端访问的连续状态,以便实现所需的业务逻辑,方便服务器端程序编写。(例如一个用户登陆进去购物网站,那么就需要服务器端记住该用户的状态,不至于方法每一页面都需要用户登陆),于是就出现了Cookie和Session用来解决这种问题。

1.Cookie

  (1)当客户端第一次访问服务器,向服务器端发送HTTP Request,服务器端返回HTTP Response,在HTTP Response的Header中通过Set-Cookie来设置Cookie,以便在客户端保存信息,例如Set-Cookie的设置如下:

名称:UserName
内容:Nicaiwoshishui
域:    cnblogs.com
脚本可访问:    是
创建时间:    2015年2月16日星期一下午3:32:28
过期时间:    2015年8月17日星期一下午3:32:28

  (2)客户端(如浏览器)在收到服务器端HTTP Response后,看到了Set-Cookie的设置,那么就会在客户端电脑浏览器相应的目录生成该Cookie文件。对于IE浏览器来说,每一个域名的Cookie的内容保存成一个文件名为XXX.txt的文件,对于Chrome浏览器来说,所有的Cookie内容都写入一个文件;不过这不是关键,我们只需知道浏览器将Cookie内容保存下来了。

  (3)当客户端第二次访问服务器时,向服务器发送HTTP Request,在HTTP Request的Header中,会包含上面的Cookie信息,这样在服务器端收到HTTP Request后,就知道是谁在访问了。

  (4)以后的每次向服务器的HTTP Request,Header中都会包含该Cookie信息,直到过期时间到了为止。

  (5)Cookie的存在大大方便了我们的操作,我们可以存入任意我们需要的信息,但是Cookie的内容会随着HTTP Request在header中传送,不宜过大。往往浏览器都会限制Cookie的大小和数目,同时也可以对Cookie内容进行压缩再进行传送。

2.Session

  Cookie的内容是保存在客户端,我们也可以把数据保存在服务器端,这就是Session。Session有会话的意思,需要与Cookie的配合才能起作用。

  (1)当客户端第一次访问服务器,向服务器端发送HTTP Request,服务器收到HTTP Request,如果在服务器端代码中启动Session设置,那么会生成一个唯一的SessionID,例如SessionID为:hu3g8fckjbk584qp2jn941vho5,之后服务器端会为以该SessionID为名生成Session文件,保存在服务器文件中,例如在服务器端生成文件名为sess_hu3g8fckjbk584qp2jn941vho5的文件;有时也会保存在内存中,生成与SessID相对应的对象;有时也可以保存在数据库中;无论保存在哪里,可以说生成了一个唯一SessionID的Session,之后我们就可以设置Session的内容了,例如Session[‘UserName‘]=‘nicaiwoshishui‘。

  (2)服务器端通过唯一的SessionID保存了用户的信息,在返回的HTTP Response中,仍然会有Set-Cookie的设置,不过现在不再需要把用户名保存在Cookie中,而是将SessionID保存在Cookie中,同样也会设置Cookie的过期时间等等信息,由于该Cookie保存的是SessionID的信息,因此也称为SessionCookie。有时我们启动Session后,并不需要我们手动的设置Cookie,web server会自动帮我们在HTTP Response的header中增加Set-Cookie的设置。

  (3)当客户第二次访问服务器,发送的HTTP Request的Header中会含有该Cookie信息,服务器端收到Cookie信息后就能从中找到SessionID,进而可以找到服务器端内保存的该SessionID的Session了,无论是从内存中、文件中、数据库中,甚至是分布式环境中。

  (4)Session可以设置有效期,如果在有效期内,一直没有客户端访问,那么到有效期过后,用户访问服务器后,需要重新设置Session;对于需要登录的网站,会提示会话过期,请重新登录。

  (5)SessionCookie也有有效期,一般默认的是关闭浏览器后就过期,因此关闭浏览器后如果在访问之前登录的网站,会提示会话过期,请重新登录。这里注意,虽然关闭浏览器后,客户端的SessionCookie就被删除了,但是如果服务器端的Session还没有过期,那么服务器端的Session信息仍然会被保留;由于SessionCookie被删除了,无法在HTTP Request的Header中传送SessionID,因此也就无法再识别该用户了。

  (6)如果使用浏览器A访问服务器端,服务器端设置的SessionID为SessionID1,使用浏览器B访问服务器端,服务器设置的SessionID为SessionID2,那么SessionID1与SessionID2不同,其中使用浏览器A的用户设置的所有Session值,如Session[‘userName‘]值会保存在SessionID1中,而使用浏览器B的用户设置的所有Session值,保存在SessionID2中,两者互相不干扰。

  (7)Session需要与SessionCookie配合才能够很好工作,如果客户端禁用Cookie后,那么Session机制就会失效,具体体现就是用户在浏览器中访问很多网站访问不了。

  (8)为了使禁用Cookie的用户能够正常访问服务器端网站,可以通过一种URL Rewriting的方法,解决Session机制失效的问题。

  理解了Session和Cookie的基本概念,对于解决一些更复杂的问题,也会变得比较容易。

时间: 2024-11-15 02:30:50

理解Session与Cookie的相关文章

深入分析理解session与cookie的作用

session与cookie在web开发中我们用到的不少了,那么关于session与cookie你有深入理解吗?今天我们就一起来看一篇关于深入分析理解session与cookie的作用的例子. 在Web发展历史中,session与cookie都是伟大的存在,其初衷都是为了记住用户在网站上的浏览信息,如果没有其他替代品的出现,几乎所有web站点都离不开session与cookie. 为什么需要 Http协议是无状态的,也就导致服务器无法分辨是谁浏览了网页.为了维持用户在网站的状态,比如登陆.购物车

第10章 深入理解Session与Cookie

10.1 理解Cookie 10.1.1 Cookie属性项 10.1.2 Cookie如何工作 10.1.3 使用Cookie的限制 10.2 理解Session 10.2.1 Session与Cookie 10.2.2 Session如何工作 10.3 Cookie安全问题 10.4 分布式session框架 10.4.1 存在哪些问题 10.4.2 可以解决哪些问题 10.4.3 总体实现思路 10.5 Cookie压缩 10.6 表单重复提交问题 10.7 多终端Session统一 10

深入理解Session与Cookie

Session与cookie的作用都是为了保持访问用户与后端服务器的交互状态. cookie通过把所有要保存的数据通过HTTP协议的头部从客户端传递到服务端,又从服务端再传回到客户端,所有的数据都存储在客户端的浏览器里. 但cookie可以通过插件被查看和修改,所有安全性不高; 相比较而言session的安全性要高的多,因为session是将数据保存在服务端,只是通过cookie传递一个sessionID而已,所有session更适合存储用户的隐私数据; 297ye //TODO

Session 与 Cookie

Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们本身只是HTTP中的一个配置项,在servlet规范中也只对应一个类而已. 理解 Cookie 通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器.W3C 在设计 Cookie 时实际上考虑的是为了记录用户在一段时间内访问 Web

理解session机制

理解session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessio

ASP.Net篇之Session与Cookie

Session: Session是“会话”的意思,然而,因为http协议是无状态的,那么每次客户端请求服务器端,服务器端都会以“崭新”的页面展示给客户端,这在静态的html页面中是不会存在任何影响,但是在动态页面中,需要与用户交互,要保持与客户端用户的联系,则需要一些东西来保持,而Session的话,则是具有“保持状态,保持会话”的能力. 注意的是,Session是保存在服务器端的.(Cookie是保存在客户端的)需要注意的是,如果用户突然关闭了客户端页面,那么Session就会丢失,即“会话丢

Asp.net Session 与Cookie的应用

写程序的很多人都知道的,Session是服务器端的东西而Cooike是客户端的东西.因为B/S模式是无状态模式,它们的应用都是要存储客户端的某些登录或是加密的信息. Session存在于服务器端,当然要占用一些服务器资源,当有户数量过多时,不可避免的影响服务器运行速度与资源.而Cookie存在在客户端不占用服务器资源,当用户浏览时,系统读取Cookie中的信息,进行匹配,这样又降低的安全性. Session的失效期太短,Asp.net中默认的是20分钟吧,而Cookie可以自定义时间,从1分钟到

web 开发常见问题--Session 与 Cookie 却别

总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保存在服务器端,由服务器管理 3.cookie有多个属性: 名称 --name,                                                                            值--value, 失效时间(不设置为会话cookie随浏览器关闭失效

Session与Cookie间不得不说的一些事

在很久很久以前,刚有浏览器和网页的时候,web开发者发现了一个问题,我必须要在客户端这边保存一些东西才能实现某些功能,比如大家喜闻乐见的购物车.用户登录.自动登陆等.但是客户端只有一个浏览器,怎么在用户也就是客户端那边保存数据呢?于是大佬们一拍桌子,Cookie就诞生了! 我把Cookie理解为一个键-值形式存储再加上有效时间的一个容器,除此之外Cookie还有一个作用范围的概念(作用范围指的是域和路径,域的意思是根域名和端口,除非在设置cookie的时候特别指定域名),可以认为在同一个域里面的