token和session的区别
2024-09-03 09:26:12
session和token都是用来保持会话,功能相同
一、session机制,原理
- session是服务端存储的一个对象,主要用来存储所有访问过该服务端的客户端的用户信息(也可以存储其他信息),从而实现保持用户会话状态。但是服务器重启时,内存会被销毁,存储的用户信息也就消失了。
不同的用户访问服务端的时候会在session对象中存储键值对,“键”用来存储开启这个用户信息的“钥匙”,在登录成功后,“钥匙”通过cookie返回给客户端,客户端存储为sessionId记录在cookie中。当客户端再次访问时,会默认携带cookie中的sessionId来实现会话机制。
- session是基于cookie的。
- cookie的数据4k左右
- cookie存储数据的格式:字符串key=value
- cookie存储有效期:可以自行通过expires进行具体的日期设置,如果没设置,默认是关闭浏览器时失效。
- cookie有效范围:当前域名下有效。所以session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上(前后端项目协议、域名、端口号都一致,即在一个项目下)
- session持久化
用于解决重启服务器后session就消失的问题。在数据库中存储session,而不是存储在内存中。通过包:express-mysql-session
- 其它
当客户端存储的cookie失效后,服务端的session不会立即销毁,会有一个延时,服务端会定期清理无效session,不会造成无效数据占用存储空间的问题。
二、token机制,原理
- 适用于项目级的前后端分离(前后端代码运行在不同的服务器下)
请求登录时,token和sessionId原理相同,是对key和key对应的用户信息进行加密后的加密字符,登录成功后,会在响应主体中将{token:'字符串'}返回给客户端。客户端通过cookie、sessionStorage、localStorage都可以进行存储。再次请求时不会默认携带,需要在请求拦截器位置给请求头中添加认证字段Authorization携带token信息,服务器端就可以通过token信息查找用户登录状态。
最新文章
- Windows Server 2008 R2 NTP服务器
- SEO之title优化
- docker 初探之简单安装 ----Windows10
- Leetcode 刷题计划
- Laravel 创建数据库
- Unity Camera的两种模式
- web.config中httpRunTime的属性
- java IO流整理
- java springboot 大文件分片上传处理
- win(64位)环境下oracle11g的安装方法
- 用交叉验证改善模型的预测表现-着重k重交叉验证
- [sh]top添加到crontab不生效问题解决
- 百度前端代码规范:CSS
- tomcat-四种运行模式和三种部署模式(优化)
- HDU 3333 Turing Tree(树状数组/主席树)
- py-day1-2 python的循环语句
- 2879: [Noi2012]美食节
- golang模拟动态高优先权优先调度算法
- 团队NABCD
- 【Android界面实现】AppWidght全面学习之电量监控小部件的实现具体解释
热门文章
- powershell 无法运行一些脚本的情况
- 给博客页面添加 live2d 小萝莉
- DOC文档与DOCX文档有什么区别
- 配置 DNS
- 5G新时代开启,你会选择哪家运营商?
- ie使用已安装的最高版本ie代码,及ie下不要在结尾处写多余的逗号“,”
- leetCode练题——21. Merge Two Sorted Lists(照搬大神做法)
- Pytorch-Faster-RCNN 中的 MAP 实现 (解析imdb.py 和 pascal_voc.py)
- Mysql将2张字段不同的表拼接起来
- Apache Shiro安全(权限框架)学习笔记二