cookie与session

cookie与session


cookie是什么?

HTTP协议是无状态的,主要是为了让HTTP协议尽可能简单,使得它能处理大量事务,HTTP/1.1引入cookie来保存状态信息

cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发送请求时被携带上,用于告知服务器两个请求是否来自同一浏览器。由于之后每次请求都会需要携带cookie数据,因此会带来额外的性能开销。

cookie的出现是因为HTTP是无状态的一种协议,换句话说,服务器记不住你,可能你没刷新一次网页,就要重新输入一次账号密码,这是令人无法接受的,而cookie的作用就好比服务器给你贴个标签,你每次向服务器再发送请求时,服务器就能从cookie认出你。

cookie的作用:
  • 会话状态管理
  • 个性化设置
  • 浏览器行为跟踪

session知识大总结

除了可以将用户信息通过cookie存储在用户浏览器中,也可以利用session存储在服务器端,存储在服务器端的信息更加安全。

session可以存储在服务器上的文件,数据库或内存中。也可以将session存储在redis这种内存型数据库中,效率会更高。

使用session维护用户登录状态的过程如下:
  1. 用户进行登录时,用户提交包含用户名和密码的表单,将其放入HTTP请求报文中
  2. 服务器验证改用户名和密码,如果正确则把用户信息存储在Redis中,它在Redis中的key也成为session id
  3. 服务器返回的相应报文的set-cookie首部字段包含了这个session id,客户端收到相应报文之后将该cookie值存入浏览器中
  4. 客户端之后对同一个服务器进行请求时,就会包含该cookie值,服务器收到之后提取出session id,从Redis中取出用户信息,继续之前的业务操作
session的工作原理

session的工作原理时客户端登录完成后,服务器会创建对应的session,session创建完之后,会把session的id发给客户端,客户端每次访问服务器时,都会带着session id,服务器拿到session id之后,在内存找到与之对应的session,这样就可以工作了。

session的使用过程时怎样的?
  1. 用户进行登录时,用户提交包含用户名和密码的表单,放入HTTP请求报文中。
  2. 服务器验证该用户名和密码,如果正确则把用户信息存储到Redis中,它在redis中的key成为session id。
  3. 服务器返回的相应报文的set-cookie首部字段包含了这个session id,客户端收到相应报文之后将该cookie值存入浏览器中
  4. 客户端之后对同一个服务器进行请求时会包含该cookie值,服务器收到之后提取数session id,从redis中取出用户信息,继续之前的业务操作。

cookie和session的对比

HTTP作为无状态协议,必然需要在某种方式保持连接状态

cookie

​ cookie是客户端保持状态的方法

​ 简单理解就是存储由服务器发至客户端并由客户端保存的一段字符串,为了保持会话,服务器可以相应客户端请求时将cookie字符串放在set-cookie下,客户机收到cookie之后保存这段字符串,之后请求时在带上cookie就可以被识别了。

​ cookie在客户端的保存形式分为两种,一种是会话cookie,另一种是持久cookie,会话cookie就是将服务器返回的cookie字符串保持在内存中,关闭浏览器之后自动销毁;持久cookie则是存储在客户端磁盘上,其有效时间在服务器相应头中被指定,在有效期内,客户机再次请求服务器时都可以直接从本地取出。在磁盘中存储的cookie是可以被多个浏览器所共享的。

**session

session是服务器保持状态的方法

​ session保存在服务器上,可以保存在数据库,文件或者内存中,每个用户由独立的session用户在客户端上记录用户的操作。可以理解为每个用户由独一无二的session id作为session文件的hash值,通过这个值可以具体锁定session结构的数据,这个session结构中存储了用户操作行为。

当服务器需要识别客户端时就要结合cookie了。每次HTTP请求的时候,客户端都会发送相应的cookie信息到服务端。实际上大多数的应用都是cookie来实现session跟踪的,第一次创建session时,服务端会在HTTP中告诉客户端,需要在cookie里记录一个session id,以后每次请求把这个会话id发送到服务器,我就知道你是谁了。如果客户端的浏览器禁用了cookie,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后都会附加一个诸如sid=xxx这样的参数,服务器根据此来识别用户,这样就可以帮用户完成了诸如用户名等信息自动填入的操作了。

cookie和session使用场景
  • cookie只能存贮ASCII码字符串,而session则可以存储任何类型的数据。在考虑数据复杂性时首选session。
  • cookie存储在浏览器中,容易被恶意查看,如要将一些隐私数据存在cookie中,可以将cookie值进行加密,然后再服务器中解密。
  • 对于大型网站,如果用户的所有信息都存储再session中,那开销是十分大的。因此不建议将所有信息都存到session中。
cookie与session的区别

cookie与session都是客户端与服务器之间保持状态的解决方案

  • 存储位置不同。
    • cookie存放在客户端
    • session存放在服务端
  • 存储得数据类型不同,两者都是key-value的结构,但针对value,两者的数据类型还是有区别的。
    • cookie只能存储ASCII字符串
    • session可以为任意类型
  • 存储数据大小不同
    • cookie大小受浏览器限制,通常为4K
    • session理论上受当前内存限制
  • 生命周期不同
    • cookie的生命周期在浏览器关闭就灭亡了。cookie的生命周期是累积的;从创建开始计时,20分钟后cookie生命周期结束。
    • session的生命周期是间隔的,从创建时开始计时,如在20分钟内没有访问session,那session的生命周期被销毁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Exile_001

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

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

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

打赏作者

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

抵扣说明:

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

余额充值