SESSION AND COOKIE

session 跟cookie有是一对好基友。它们诞生与HTTP协议有一定的历史关系。

简单来说,session与cookie是为了满足HTTP协议1.1所不能满足需求,应运而生。但是这对好基友却不是协议层面的实事物,他们从本质上,是对HTTP协议的一种扩展

HTTP协议是无状态的,而session与cookie则是分别从服务器端与客户端去维护访问状态。

举个例子,今天你登录某网站,然后关了电脑,第二天开机,再次登录该网站,发现不需要再次输入用户名和密码。这是由于cookie在客户端保存了你的登陆信息或者说账户资料,并且该cookie对应于服务端拥有唯一标识的session,session保存了账户的访问状态,所以用户登陆后cookie会随着访问请求一起发送往服务端,服务端由此可以将用户当做已登陆来识别。而这个访问状态显然就是指数据(用户名或者密码之类的)。



cookie:

无论使用何种服务端技术,只要发送回的HTTP响应中包含如下形式的头,则视为服务器要求设置一个cookie:

Set-cookie:name=name;expires=date;path=path;domain=domain

支持cookie的浏览器都会对此作出反应,即创建cookie文件并保存(也可能是内存cookie),用户以后在每次发出请求时,浏览器都要判断当前所有的cookie中有没有没失效(根据expires属性判断)并且匹配了path属性的cookie信息,如果有的话,会以下面的形式加入到请求头中发回服务端:

Cookie: name="zj"; Path="/linkage"

服务端的动态脚本会对其进行分析,并做出相应的处理,当然也可以选择直接忽略。需要注意的是,出于安全性的考虑,cookie可以被浏览器禁用。


session:

它的基本原理是服务端为每一个session维护一份会话信息数据,而客户端和服务端依靠一个全局唯一的标识来访问会话信息数据。用户访问web应用时,服务端程序决定何时创建session,创建session可以概括为三个步骤:

1.   生成全局唯一标识符(sessionid)。

2.   开辟数据存储空间。一般会在内存中创建相应的数据结构。但是!这种情况下,系统一旦断电,所有的会话数据就会丢失,如果是电子商务网站,这种事故会造成严重的后果。不过也可以写到文件里甚至存储在数据库中,这样虽然会增加I/O开销,但session可以实现某种程度的持久化,而且更有利于session的共享。

3.   将sessionid发送给客户端。而发送sessionid又有两种方式:cookie和URL重写

      cookie:服务端只要设置Set-cookie头就可以将session的标识符传送到客户端,而客户端此后的每一次请求都会带上这个标识符,由于cookie可以设置失效时间,所以一般包含session信息的cookie会设置失效时间为0,即浏览器进程有效时间。至于浏览器怎么处理这个0,每个浏览器都有自己的方案,但差别都不会太大(一般体现在新建浏览器窗口的时候)

      URL重写:就如字面意思那样。在返回用户请求的页面之前,将页面内所有的URL后面全部以get参数的方式加上session标识符,这样用户在收到响应之后,无论点击哪个链接或提交表单,都会在再带上session的标识符,从而就实现了会话的保持。

如果客户端禁用了cookie的话,URL重写将会是首选。



那么这整个过程是怎样的呢?

当你访问某网址的时候,服务器返回的响应头里会有Set-cookie  JSESSIONID="xx";Path="xx";name="xx";expires="xx";domain="xx";name="xx";

这个JSESSIONID里面的就是sessionid了,这就是服务器创建了seesion,记录了访问状态,并且告诉客户端浏览器以sessionid为唯一标示符,创建cookie。并且每次发出请求前都要去匹配所有cookie的Path属性,将相匹配的cookie以下面这种形式发送到服务端:

Cookie: JSESSIONID="xx";name="xx"; Path="xx";

服务端在识别cookie中的sessionid后会在服务端调用匹配的session对访问请求进行处理,再次返回的响应里就不会带有涉及session或者cookie的信息。

cookie和session都有可以设置有效期,一般来说session中默认有效期都是短时效的,例如Tomcat中Session的默认失效时间为30分钟,cookie的有效期。当然,也可以在有效期期间清除session或cookie,如手动清除cookie或session,关闭浏览器后引发session超时等。

有关session的手动销毁,这里有个小知识。当服务端销毁session后,客户端依旧发送cookie,这时服务端在找不到匹配的sessionid的情况下会重新创建新的session,并告知客户端更新sessionid开始保持新的会话。


我们再来看看session与cookie在其他方面的对比:

安全性

cookie将信息保存在客户端,如果不进行加密的话,安全性很差,即使加密也很容易就会被窃取。而session只会将信息存储在服务端,如果存储在文件或数据库中,也有被窃取的可能。session安全性方面比较突出的是存在会话劫持的问题,当sessionid被盗用,由于HTTP协议的无状态性,服务器无法得知session是否被劫持,但总的来讲安全性要高于cookie。

大小限制

Cookie的处理在开发中没有session方便。而且cookie在客户端是有数量和大小的限制的,而session的大小只以硬件为限制,能存储的数据大了很多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容