推荐博客http://justsee.iteye.com/blog/1570652
由于http协议的无状态性,使得在动态客户端和服务端的每一次交互中都需要进行身份验证,session和cookie就是为了解决这种需要频繁验证的麻烦而作出的努力。
session机制是采用的是在服务器端保持状态的方案。
在用户端保留一个唯一的编号,对应编号的信息(如访问信息)保存在服务端,进行交互时客户端传递编号,服务端接收到编号在服务端数据库中查找对应的信息。
cookie机制采用的就是这种在客户端保持状态的方案
在用户端保留一个保存用户信息的对象,进行交互时客户端传递这个对象,服务端读取其中的信息即可。
上述链接文章中有一个比喻很形象
让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。
由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。
View Code