对于session与cookie机制,自己的一点理解

来源:互联网 发布:时间序列预测值算法 编辑:程序博客网 时间:2024/05/29 16:47

参考:http://hi.baidu.com/jmtbai/item/0b4a46f9b57f296e3d148575

session与cookie:
session与cookie的引入原因:用户在浏览一个网站时候可能会浏览此网站的多个网页(比如百度的贴吧和知道)。用户每次打开一个网页都要和服务器重新建立连接,但是由于http协议无状态无记忆的特点,此次连接无法获得上次连接的状态。这样,比如用户在之前此网站下的一个网页登陆了,在跳转到此网站的另一个网页的时候却无法得到原先的登陆信息。
总而言之,就是在同一个客户端与同一个服务端多次连接的过程中,由于http协议无状态无记忆的特点,一些变量的值无法传递。

解决方法:
思路:在服务器端保持状态——当客户端(用户)访问服务器的时候,服务器为每个用户分配一个session(session可以看做是一个存储空间,可以存储一些变量,比如登陆信息,购物车信息等),每个session同时分配一个唯一的session id来标记,这个session放在服务器的内存之中。同时将这个session id发送给客户端,保存在客户端的会话cookie中。

这样,当客户端再次和服务器建立连接的时候,客户端会把对应此服务器的session id发送给服务端,根据此session id,在服务器中查询为此用户分配的session是否存在,如果存在的话,此次连接就可以获取到之前连接时候保存在session中的一些信息。

关于cookie:
cookie分为两种:session cookie 与 persistent cookie
session cookie一般保存在客户端的内存中,配合session使用,当服务端为每个用户分配了一个session之后,需要将session id发送给用户,这样用户再次和服务器建立连接时候,能够辨认用户对应服务端的哪个session,这个session id通常就被存在session cookie之中。

persistent cookie:典型应用——自动登录:当用户登录一个网站时,服务器会发送包含登录凭据(用户名+密码的加密形式以及网站的标识)的cookie到用户的硬盘上。第二次登录时,(如果该Cookie尚未到期)浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。

session与cookie的一个经典小例子:
一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
1、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。——相当于cookie机制
2、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。其中,会员号必须客户自己知道,这就相当于session cookie。——相当于session机制