一个小例子:浏览器
星巴克开始优惠活动,每消费10杯咖啡,会免费赠送1杯。考虑到一我的一次性消费10杯咖啡几乎不可能,因此须要采起某种方式来记录顾客的消费数量。安全
解决方案:服务器
1,店员很厉害,每一个顾客的消费记录都记得一清二楚;cookie
2,分给顾客一张卡片,每消费一次记录一次;session
3,发给顾客一张卡片,上面有卡号,顾客每消费一次,由店员在操做机上记录一次。性能
从生活上来看,方案一的可执行性几乎为0,方案二和方案三咱们都见过。网站
而方案二和三正是对应的客户端记录和服务端记录。与之相对应的正式cookie和session。编码
好了,咱们进入正题。code
咱们知道HTTP协议是一种无状态的协议,数据一旦交换完毕,客户端与服务端的链接就会关闭,再次交换数据须要从新创建链接。而咱们有时候又有跟踪会话的需求,因此必须引入一种机制:cookie。资源
什么是cookie?
cookie是一小段文本信息,它记录了一个用户访问某个网站时的用户信息。
cookie机制
cookie机制其实在前面已经说了,但cookie须要解决三个问题:分发、内容和使用。
cookie的分发是经过扩展HTTP协议来实现的,服务器端经过在HTTP的响应由中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。
cookie的内容主要包括名字、值、过时时间、路径和域。
cookie的使用是由浏览器按照必定的原则在后台自动发送给服务器。浏览器检查全部存储的cookie,若是某个cookie所声明的做用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
cookie属性
name:cookie的名字,一旦建立,名称不可更改。
value:cookie的值,若是值为Unicode字符,须要为字符编码。若是为二进制数据,则须要使用BASE64编码。
maxAge:cookie失效时间,单位秒。若是为正数,则该cookie在maxAge后失效。若是为负数,该cookie为临时cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该cookie。若是为0,表示删除该cookie。默认为-1。
secure:该cookie是否仅被使用安全协议传输。
path:该cookie的使用路径。若是设置为"/sessionWeb/",则只有ContextPath为“/sessionWeb/”的程序能够访问该cookie。若是设置为“/”,则本域名下ContextPath均可以访问该cookie。
session机制
session机制是一种服务端的机制,服务器使用一种相似散列表的结构来保存信息。
当程序须要为某个客户端的请求建立一个session的时候,服务器首先检查这个客户端里的请求里是否已包含了一个session标识--sessionID,若是已经包含一个sessionID,则说明之前已经为此客户端建立过session,服务器就按照sessionID把这个session检索出来使用(检索不到,可能会新建一个),若是客户端请求不包含sessionID,则为此客户端建立一个session而且声称一个与此session相关联的sessionID,sessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionID将被在本次响应中返回给客户端保存。
保存sessionID的方式
1,使用cookie:通常这个cookie的名字都是相似于XSESSIONID
如:JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 ---名字就是JSESSIONID
2,URL重写:由于cookie能够被人为禁止,因此为了保证sessionID可以被传递给服务器,使用URL重写也是一种解决方法。
如:
http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
两种写法都行。
session、cookie的区别
1,cookie数据存放在客户的浏览器(本地),session数据放在服务器上;
2,cookie不是很安全,别人能够分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;
3,session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie;
4,单个cookie保存的数据不能超过4k,不少浏览器都限制一个站点最多保存20个cookie;
5,能够将重要信息存放为session。