相关视频:v.qq.com/x/page/f0513vvyti4.html
PPT:ptteng.github.io/PPT/PPT/java-05%20cookie&session.html#/
一个小例子:
星巴克开始优惠活动,每消费10杯咖啡,会免费赠送1杯。考虑到一个人一次性消费10杯咖啡几乎不可能,所以需要采取某种方式来记录顾客的消费数量。
解决方案:
1,店员很厉害,每个顾客的消费记录都记得一清二楚;
2,分给顾客一张卡片,每消费一次记录一次;
3,发给顾客一张卡片,上面有卡号,顾客每消费一次,由店员在操作机上记录一次。
从生活上来看,方案一的可执行性几乎为0,方案二和方案三我们都见过。
而方案二和三正是对应的客户端记录和服务端记录。与之相对应的正式cookie和session。
好了,我们进入正题。
我们知道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。
--------------------------------------------------------------------------------------------------------------------
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~ 点击此链接:http://www.jnshu.com/login/1/10014595