http协议是没有状态的,客户端只需要简单的向服务器端发送请求,服务端即会相应请求作出回应。无论是客户端还是服务端,都不会记录彼此的行为。每一次的请求之间都是独立的。
cookie作用就是解决http协议无状态的缺陷。而session则是一种在服务器端与客户端之间保持联系的机制。
一些很形象的例子来说明cookie与session之间的关系:
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。
理解cookie机制:
正统的cookie的分发是通过扩展http协议来实现的,服务器通过在http相应头中加上一行页数的指示以提示浏览器按照指示生成相应的cookie。
cookie的使用则是浏览器按照一定的规则在后台自动发送给服务器。浏览器检查所存储的cookie,并且把cookie附在请求资源的http请求头上发送给服务器。
cookie的内容主要包括:名字、值、过期时间、路径和域。
路径与域加在一起就形成了cookie的作用范围。
理解session机制:
session是一种服务器端的机制。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先会检查客户端的请求中是否已经包含了一个session标示(sessionid),如果已经包含一个sessionid 则说明已经为这个客户端建立过session,服务器就会按照这个sessionid把这个session检索出来使用。