首页 > 代码库 > cookie与session的区别与联系

cookie与session的区别与联系

1.背景

http的无状态:协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开服务器上的网页和你之前打开这个网页之间没有联系。

2.cookie和session原理:

cookie和session是一种会话跟踪技术。

cookie在客户端(浏览器)保存状态,session在服务器端保存状态。

技术分享

cookie:

客户端浏览器发送一个http请求给web服务器。

web服务器会有一个响应,并以set-cookie的形式将cookie返回给客户端浏览器,客户端浏览器会把这个cookie保存下来。

当客户端浏览器再一次请求web服务器时,会带上这个cookie。

web服务器接受这个请求,给出一个响应。

技术分享

session

客户端(浏览器A)第一次访问php1页面的时候,启动session_start(),生成一个sessionID,服务器响应客户端请求时,会将sessionID以cookie的方式保存到浏览器A;

当浏览器A请求php2页面的时候,会把自己保存在cookie中的sessionID带到服务器,服务器会根据sessionID来找到对应的文件,从而响应;

同理,对于客户端浏览器B而言,也是一样的;

3.对比:

session比cookie安全

session消耗服务器资源,cookie消耗客户端资源

session往往建立在cookie之上。

4.一个比较形象的解释,来自于wiki baidu

举个例子先:在河南时,我常到一家熟食店买馋嘴鸭,该店老板为了促进销售,特发布“每购满10只即可免费赠送一只”的优惠措施。除了家里有什么红白喜事要飨客之外,应该不会有人一次性购买10只烤鸭吧?所以老板得想个法子来记录顾客的消费数量,这里总共有三种方案: 

Ⅰ、老板记住每一个顾客的消费数量,等到顾客消费满10只的时候自动奉送一只。这好比HTTP协议本身是有状态的,可以记住顾客的活动行为。但遗憾的是,出于种种考虑http协议本身是不能有状态的,老板自个也没有这么超常的记忆力,故这种方案行不通! 

Ⅱ、老板发给顾客一张积分卡,上面记录着消费的数量,一般还有个有效期限。每次买烤鸭时,如果顾客出示这张卡片,老板就知道这位顾客曾经光顾过小店。这种做法就是在客户端保持状态,好比是cookie技术。打开(windows系统)C:\Documents and Settings\用户名\Cookies,你会发现一些*.txt格式的小文件,这就是你浏览某些网站,它们发给你的“积分卡”(cookies)。 

Ⅲ、老板发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次买烤鸭时,如果顾客出示该卡片,则老板搬出店里的划名册,找到你的卡号并加1个积分。这种做法就是在服务器端保持状态。 

好比是session技术。

SESSION 在不关闭并服务器不超时 只有SESSIONID,当如果想让用户下次登入网站不需要输入用户名或者密码的时候就只能用COOKIE。 

因为他可以保留相当长的时间(在COOKIE记录被删除或者失效日期之前),而SESSION就不可以,他不会保留太长时间,而且IE在关闭后就自动清除了SESSIONID记录在下次登入的时候会请求新的SESSIONID。 

而服务器想通过用户个人变量校验用户的状态的时候,就不能用COOKIE 

如果用设置用户权限是USER。而IE访问的时候就把USER的明码传输到服务器。 

那么如果我通过一定手段,比如直接修改COOKIE记录,把USER修改成ADMIN呢~~ 

就麻烦了。 

但存储用户名和密码或者网站的配色方案这样的信息,用COOKIE是最好的

cookie与session的区别与联系