cookie 及 session 介绍

一、cookie及session

1.1 Cookie

在浏览器中,经常涉及到数据的交换,比如登录邮箱,登录一个官网,会设置自动登录选项。

Cookie 是由 HTTP 服务器设置的,保存在「浏览器」中,但 HTTP 协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。

由于 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道用户身份。例如:小明购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于小明的会话还是小刚的会话了。如何解决呢?那么给客户端们发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了,这就是Cookie的工作原理。

Cookie 实际上是一小段的文本信息,浏览器请求服务器,如果服务器需要记录该用户状态,就使用response 向浏览器颁发一个 Cookie ,浏览器会把Cookie保存起来。

当浏览器再请求该网站时,浏览器把请求的网址连同该 Cookie 一同提交给服务器,服务器检查该 Cookie ,以此来辨认用户状态。

1.2 Session

Session 创建于服务器端,「保存于服务器」,维护于服务器,每创建一个新的 Session,服务器端都会分配一个唯一的 ID,并且把这个 ID 保存到浏览器的 Cookie 中,保存形式是以 「sessionID」 来保存的。

浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。浏览器再次访问时只需要从该 session 中查找该客户的状态就可以了。

每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。

1.3 Cookie 和 Session 的区别

  1. 存储位置不同:cookie 存放于客户端;session 存放于服务端;
  2. 存储容量不同:单个 cookie 保存的数据 <=4KB ,一个站点最多保存 20个 cookie ;而 session 并没有上限。
  3. 存储方式不同:cookie 只能保存 ASCII 字符串,并需要通过编码当时存储为 Unicode 字符或者二进制数据;session 中能够存储任何类型的数据,例如字符串、整数、集合等;
  4. 隐私策略不同:cookie 对客户端是可见的,别有用心的人可以分析存放在本地的 cookie 并进行cookie 欺骗,所以它是「不安全」的;session 存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险;
  5. 生命周期不同:可以通过设置 cookie 的属性,达到 cookie 长期有效的效果;session 依赖于名为 JSESSIONID 的 cookie,而该 cookie 的默认过期时间为-1,只需关闭窗口该 session 就会失效,因此 session 不能长期有效;
  6. 服务器压力不同:cookie 保存在客户端,不占用服务器资源;session 保管在服务器上,每个用户都会产生一个 session,如果并发量大的话,则会消耗大量的服务器内存;
  7. 浏览器支持不同:cookie 是需要浏览器支持的,如果客户端禁用了 cookie,则会话跟踪就会失效;运用 session 就需要使用 URL 重写的方式,所有用到 session 的 URL 都要进行重写,否则session 会话跟踪也会失效。
  8. 跨域支持不同:cookie 支持跨域访问,session 不支持跨域访问。

1.4 cookie和session各自适合的场景是什么?

对于敏感数据,应存放在 session 里,因为 cookie 不安全。

对于普通数据,优先考虑存放在 cookie 里,这样会减少对服务器资源的占用。

1.5 session的工作原理

session依赖于cookie。

当客户端首次访问服务器时,服务器会为其创建一个 session 对象,该对象具有一个唯一标识SESSIONID。并且在响应阶段,服务器会创建一个 cookie ,并将 SESSIONID 存入其中。

客户端通过响应的 cookie 而持有 SESSIONID,所以当它再次访问服务器时,会通过 cookie 携带这个SESSIONID。服务器获取到 SESSIONID 后,就可以找到与之对应的 session 对象,进而从这个session 中获取该客户端的状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuZhan7710

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值