- Published on
cookie 和 session 登录鉴权
会话机制主要是为了解决 http 无状态的问题,目的是为了标识客户以及跟踪状态
。如果要保证会话成立,那么就意味着用户的标识需要在客户端和服务端都存在。故下面情况会导致会话失效:
- cookie 失效
- session 失效或对应标识不存在
cookie
cookie 通俗理解可以理解为身份凭证,当你持有 cookie 访问服务器时,服务器会得知你的身份,如果身份验证有效,则代表此次请求成功。如图:
cookie 分为 2 种类型:
- 会话 cookie
- 持久性 cookie
上图中客户端拿到的是会话 cookie,会话 cookie 存储在浏览器内存中,当浏览器关闭时,cookie 就会跟随内存释放而消失,这时如果重新访问服务器则需要重新请求 cookie。
持久化 cookie 会存储在电脑硬盘上,不会随着浏览器关闭而消失。
cookie 返回的信息最大大小为 4kb。
session
session 保存在服务端,本质类似一个 Map,键值对方式来存储。
可以将用户信息存储在 session 中。
序列化
当服务器需要重启时,会将内存中的 session 序列化到磁盘上,等重启,会将其取回内存。
还有一种场景,如果用户过多,会导致 session 猛增,加大服务器的内存开销。为了减少内存开销,可以将不怎么活跃的用户的 session 序列化到磁盘上,并且将其从内存中释放,等用户重新活跃时,读取磁盘上的序列化文件,将其取回内存,并将磁盘上的文件删除。此过程称为 Session 的钝化和活化。
该鉴权方式优势
- 简单
- 用户信息在服务端,可以马上封禁用户。
鉴权方式缺点
- 占用服务端内存,增加硬件成本
- 多进程,多服务器下数据不好同步 - 需要第三方存储(例如:redis),成本高
- 跨域传递 cookie 需要特殊配置