session、cookie和taken的区别
http是无状态的协议,所以要维持应用的会话形式,就需要加入以下几种机制,来进行会话跟踪,识别用户身份(当同一用户进行多次操作,不用反复请求建立新的连接,从而节省服务器资源和处理速度)
生成位置 | 存储方式 | 验证原理 | 特点 | |
cookie (记录用户身份) |
服务器 |
在客户端浏览器内以文件形式存储(键值对name=value) 常见包括name(cookie名称)、path(对于服务器其他页面的可用性)、domain(顾名思义,同域内的其他服务器共享可用性)、secure(该属性若未出现,这意味着cookie在网络中未加密传输;secure属性并不能对Cookie内容加密,因而不能保证绝对的安全性。如果需要高安全性,需要在程序中对Cookie内容加密、解密,以防泄密。) |
1.用户通过用户名和密码 发送请求 2.服务器生成cookie(服务器针对客户端状态的一小段文本信息)并在响应头中返回 3.在之后的请求中携带cookie,服务器进行检查(如前所示,这些信息都可被篡改和截取) |
1.安全性较差,攻击者可截取cookie进行目标权限的操作 2.需要浏览器支持 3.不可跨域 |
session (记录用户状态) |
服务器 |
服务器 redis数据库、file(php)、内存(tomcat)中。存储形式为hash(key-field-value);包括sessionid(为随机生成字符串)该id会写入cookie中发至客户端。 同时Session需要使用Cookie作为识别标志,因为Session不能依据HTTP连接来判断是否为同一客户 |
1.用户通过用户名和密码 发送请求 2.服务器生成session(包括sessionid、sessionid对应的key值)存储在服务器中,之后发送cookie(值为sessionid)在响应头中返回 3.在之后的请求中携带cookie(sessionid),服务器进行检查(根据sessionid来查找目标session,比对是否一致) |
拓展性较差(若服务器存在负载均衡,session只存在了其中某台) |
token | 服务器 |
客户端、服务器(只保存未到期却注销的token,以便下次收到使用这个token时判其无效) 一般包括uid(用户唯一的身份表示)、time(时间戳)、sign(签名、密钥等)、URL(请求的路径) |
1.用户通过用户名和密码 发送请求 2.服务器进行验证(用户合法性) 3.服务器签发一个签名的token(生成过程可参考对称加密)给客户端 4.客户端存储并在每次发送请求携带该token 5.服务器通过特定的加密算法对token进行过滤选择(比如HMAC) 6.校验通过返回增删改查数据;校验未通过返回错误码 |
1.无状态、可拓展(因为token并) 2.相对安全(可防止CSRF攻击) 3.可拓展性强(可分享权限给第三方应用) 4.多平台跨域(完全由应用管理) 5.基于标准化 |
假设一个场景,有一栋大楼有门禁。
cookie机制:只要你带通行证不管你是谁都可以进来,只认通信证,cookie在这里是通行证。
session机制:要报你的门牌号户主姓名电话号码,大楼门卫在信息表里找到对应的就会放行。session在这里是信息表里的门牌号户主姓名电话号码。
token机制:检验通行证,同时需要对暗号“天王盖地虎”---“宝塔镇河妖”,暗号错一个字都不行。token在这里就是通行证和暗号。
如有纰漏望不吝赐教!
最新文章
- IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
- 框架学习笔记:深度解析StrangeIoC内部运行机制
- 先前设定的sa密码忘记了,如何修改sa密码?
- 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名 .
- autoIT 自动化上传/下载文件图文详解【python selenium】
- .net转php laraval框架学习系列(三)项目实战---Route&;Controllers
- 根据input 标签取value属性的值
- javascript语句语义大全(1)
- Linux集群
- I/O输入输出流
- 我的第一个python web开发框架(22)——一个安全小事故
- HashMap 和 HashTable差别
- SAS PROC PRINT 常用选项和语句说明
- iOS开发简记(1):指定APP的图标与启动图
- KVM ->; 虚拟机管理&;console登录_02
- centos7 jdk
- WinForm自定义控件
- OSCache-缓存对象
- Codeforces Round #248 (Div. 1) A. Ryouko's Memory Note 水题
- SQL创建视图
热门文章
- 林轩田机器学习基石笔记3—Types of Learning
- shell-变量学习-01
- JVM内存基本理解
- 用数组实现栈(C++)
- js 中 == 和 === 的区别
- The entity ";nbsp"; was referenced, but not declared
- 烧钱时代终结!O2O还能玩啥花样?
- iOS开发黑科技之runtime
- LNMP环境搭建--Centos7
- Docker Swarm和Kubernetes在大规模集群中的性能比较