cookies和session简单介绍

cookies在translate.google.cn的翻译是“曲奇饼”,为什么在web应用中会使用这个单词作为代表呢?感兴趣的请看英文解释,看不懂,上中文解释

在介绍cookies之前先解释一下为什么web应用会有cookies,web请求本身是没有状态的,换句话说,上次请求和下次请求是没有任何关系的,但是很多场景下,比如用户在本次请求里做进行登录,下次请求时下单,下单必须是登录状态才能进行,由于web请求是无状态的,web服务器怎么才能知道这次请求的用户是已经登录的呢,这就需要他们建立关系,那么怎么建立这个关系呢,总得有个东西做标示吧,cookies就诞生了。

cookies的过程如下:

  • 客户端向服务器请求。
  • 服务器端向客户端发送cookies。
  • 客户端将cookies保存。
  • 之后每次请求客户端都会将cookies带给服务器端。
如果在cookies里写入用户的唯一标示,比如用户名(ID),当请求到达服务器时,通过解析cookies就可以知道客户端是否登录,并且登录的用户信息了。
cookies是怎么写到客户端的呢,这就是http协议了,比如:
如果服务器端返回的数据头里有以下字段:
Set-Cookie: cookies_name = abcd;
expires = "1512132424";
path = /t/test;
domain = cookies.baidu.com;

那么客户端看到这个头之后,就会在本地cookies种上一个只有cookies.baidu.com/t/test才能发给服务器端,cookies名为cookies_name,值为abcd,为什么呢,因为这是约定,如果通过脚步强求强行带cookies到服务器端,那谁也没办法,这就是协议之外的事情了。如果有对expires(过期时间戳)感兴趣的可以参考 这篇文章

cookies就介绍这么多吧,那么cookies已经能满足目前的需求了,为什么还有sessions呢?因为cookies有个很大的缺点,那就是安全问题,cookies是保存在客户端的,黑客或者犯罪分子可以通过篡改cookies值达到一定的目的,这是最主要的原因,当然cookies还有个缺点就是,如果在一个域名*.baidu.com下保存了字节数很大的cookies值,那么每次请求类似*.baidu.com时,都会带上这些值,对带宽造成很大影响,也会对服务器造成一定的影响。

sessions的出现是为了解决前面的安全问题,因为sessions是保存在服务器端的,比较重要的信息需要保存在服务器端,而在cookies里写入一个加密后的字符串作为sessions的唯一索引,这样sessions就不会乱。connect默认采用的是connect_uid,Tomcat会采用jsessionid等等方式。很多大型的网站会自己存储sessions,比如存放在redis或者memcached中,通过某种手段维护这个对应关系。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值