浅谈cookie和session

一个小例子:

星巴克开始优惠活动,每消费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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值