理解Cookie 和 Session 的工作流程

又是一年初,首先祝大家新年快乐!!!

Cookie

什么是Cookie?

由于HTTP是一种无状态的协议, 服务器单从网络连接上是无法知道用户身份的. 这时候服务器就需要给客户端发一个cooki, 用来确认用户的身份.

简单的来说, cookie就是客户端保存用户信息的一种机制, 用来记录用户的一些信息.

找到Cookie

  1. 例如我们打开百度网站.

  1. 点击这个锁🔒

  1. 点击Cookie, 就可以看到此时正在使用的Cookie

Cookie的构成

服务器端向客户端发送Cookie是通过HTTP响应报文实现的,在Set-Cookie中设置需要向客户端发送的cookie,cookie格式如下:

下图是MDN里的.

例如:

Set-Cookie: "name=value;domain=.domain.com;path=/;expires=Sat, 20 May 2022 5:20:00 GMT;HttpOnly;secure"

其中, name=value是必须的, 其他是不必要的.

name是唯一确定的Cookie名称, value是储存在cookie中的字符串值, domain表示cookie对于那个域是有效的, path表示cookie影响到的路径, expires是失效时间, max-age是用来告诉浏览器cookie啥时候过期, HttpOnly是告知浏览器不允许通过脚本去更改值, secure是安全标志只有在SSL链接时才能发送到服务器.

Cookie的特点

Cookie不提供修改, 删除操作.

如果要修改某个Cookie, 只需要新建一个同名的Cookie, 添加到response中覆盖原来的Cookie

如果要删除某个Cookie, 只需要新建一个同名的Cookie, 并将maxAge设置为0, 并添加到response中覆盖原来的Cookie. 注意是0而不是负数. 负数代表其他的意义

Session

什么是Session?

Session是另一种记录客户状态的机制, 不同的是Cookie保存在浏览器中, 而Session保存在服务器上.客户端浏览器访问服务器的时候, 服务器把用户信息记录在服务器上.

客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了.

Session的工作步骤

因为Http协议是无状态的, Session不能依据Http连接来判断是否为同一个用户. 所以服务器向用户的浏览器发送一个名为JESSIONID的Cookie, 它的值是Session的id值. 这个id可以让Session依据Cookie来识别是否是同一个用户.

  1. 产生SessionID

  1. 保存SessionID

  1. 使用Session

Cookie和Session的区别

  • Cookie数据存放在客户端, Session数据放在服务器上

  • Cookie的安全性一般, 他人可通过分析存放在本地的Cookie并进行Cookie欺骗, 就不安全,所以一般选择Session更好. 重要交互信息比如权限等就要放在Session中, 一般的信息记录放Cookie中.

  • Session会在一定时间内保存在服务器上, 当访问增多, 会比较占用你服务器的性能考虑到减轻服务器性能方面, 应当使用Cookie.

  • Session 的运行依赖SessionID, 而 SessionID 是存在 Cookie 中的, 那么也就是说, 如果浏览器禁用了 Cookie, Session 也会失效 (但是可以通过其它方式实现, 比如在 url 中传递 SessionID, 也就是地址重写).

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

即将秃头的菜鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值