token和session和cookie的区别

Z, ZLW 1201

token和session和cookie的区别:一、cookie和session的区别;二、token和session的区别;三、token和cookie的区别。其中,cookie和session的区别体现在:1、存储位置不同;2、存储容量不同;3、存取方式不同;4、隐私策略不同;5、服务器压力不同;6、浏览器的支持不同。

一、cookie和session的区别

  1. 存储位置不同:session存储在服务器,cookie存储在客户端
  2. 存储容量不同:单个cookie保存数据小于等于4kb,一个站点最多保存20个cookie;session没有上限,但是由于服务器内存性能考虑,session不要存太多东西,并有删除机制
  3. 存取方式不同:cookie只能保存ASCII字符串;session能存取任何类型的数据
  4. 隐私策略不同:cookie是对客户端是可见的,可以分析存放在本地的cookie并进去cookie欺骗;session存储在服务器上,对于客户端是透明的,不存在敏感信息泄露的风险
  5. 服务器压力不同:session是保存在服务端,每隔用户都会产生一个session。加入并发访问的用户太多,会产生很多的session,对服务器是一个很大的负担,耗费大量内存cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,session是一个很好的选择。
  6. 浏览器的支持不同:session不支持新建窗口,只支持字窗口。而cookie都支持。 

二、token和session的区别

  1. session是一种记录服务器和客户端会话状态的机制,使服务端有状态化。而token是令牌,访问资源接口(API时)所需要的认证资源,token使服务器无状态化,不会存储会话信息。
  2. session和token并不矛盾,作为身份认证token比session安全性更好,因为每一个请求都有签名,还能防止监听以及重放攻击,而session就必须依赖链路层来确保通讯安全了。

三、token和cookie的区别

  1. token支持跨域访问 ,将token置于请求头中,而cookie是不支持跨域访问的;
  2. 无状态化, 服务端无需存储token ,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session;
  3. 无需绑定到一个特殊的身份验证 方案(传统的用户名密码登陆),只需要生成的token是符合我们预期设定的即可;
  4. token更适用于移动端 (Android,iOS,小程序等等),像这种原生平台不支持cookie,比如说微信小程序,每一次请求都是一次会话,当然我们可以每次去手动为他添加cookie,详情请查看博主另一篇博客;
  5. token避免CSRF跨站伪造攻击 ,还是因为不依赖cookie;
  6. token非常适用于RESTful API ,这样可以轻易与各种后端(java,.net,python…)相结合,去耦合。

四、token和session和cookie简介

token:token存在客户端,但它是服务端发回来的,每次请求都需要携带token,把token放到HTTP的Header中,基于token的用户认证是一种服务端无状态的认证方式,服务端不用存放token数据,用解析token的计算时间换取session的存储空间,减轻服务器压力,减少频繁查询数据库,token完全由应用管理,避开同源策略。

session:是另一种记录服务器和客户端会话状态的机制。session是基于cookie实现的,session存储在服务器端,session_id会被存储到客户端的cookie中。用户第一次请求服务器的时候,服务器根据用户提供的信息创建对应的session,请求返回时将此session的唯一标识信息session_id返回给浏览器,session_id存在cookie中,同时cookie记录此session_id属于哪个会话。二次访问服务器时,请求会自动判断此域名下是否存在cookie信息,如果存在自动发送给服务端,服务端会自动从cookie中获取session_id,在根据id查找对应session信息,id是加密过的,session_id是连接cookie和session的桥梁。

cookie:是客户端用来存放数据的一个容器,大小约为4k,是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再次发送请求时被携带并发送到服务器上。cookie是不可跨域的,每个cookie都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部