Cookie & Session & Token 的区别

cookie

session

token

总结

cookie

cookie的基本流程 :

1. 浏览器 -->服务器端 

发送http请求

2. 服务器端 

服务器进行cookie设置,也就是set-cookie,cookie中有名Name和值Value两个重要属性,服务器会把名和值属性里面的内容填充完整

3. 服务器 -->浏览器

服务器将cookie发给浏览器

4. 浏览器端

浏览器会保存从服务器传来的cookie,这样浏览器发送的每个请求都会自动附加上这个cookie即:cookie就是一种存储在浏览器的数据而已

session

打开浏览器可以直接看到保存了哪些cookie,也就是说将用户名和密码放在cookie是很不安全的,电脑被黑,在cookie的重要信息就会泄露,为了补充这一弊端,产生session会话 

浏览器访问服务器就是会话的开始,比较模糊的每个网是会话关闭的时间,因此网站对于与每个用户的会话都设定了时间以及唯一的ID,这里的ID就是session ID(时间唯一),时间是结束会话的时间,因为是服务器自己设定的,所以session一般保存在数据库里面

有用户名为什么要多设置一个session ID?

session访问服务器的过程:

1.浏览器 -->服务器端

用户名密码发送给服务器

2.服务器

核对账户密码正确性,认证成功,在服务器创建一个Session ID 和会话结束时间

3.服务器端 -->浏览器

服务器设置cookie , 把Session ID 和会话结束时间(cookie的有效期)发送给浏览器.

4.浏览器

浏览器拿到cookie后进行保存 注意 : 浏览器保存的不是账号密码,保存到是session ID(没有规律的字符串),浏览器保存了cookie以后,会利用cookie的核心特点(每个请求都会自动发送cookie到相应服务器那里),浏览器接下来的每次访问都会自动发送session ID给服务器,直到cookie的有效期失效后,浏览器一般就会自行删除这个cookie,那么在cookie失效之后,用户就需要重新输入账号密码了

注意 : Session ID通常是一串没有规律的字符串,被外来入侵时,黑客不能拿着session ID推断出用户的账号密码 . 服务器在发送cookie之前是会对这个含有session ID的cookie进行签名,一一旦session ID被修改,就会变成服务器识别不了的字符串. 

token

互联网发展用户群体越来越大,如果服务器依旧使用基于cookie的session,在特定时间有大量用户访问服务器的时候,服务器就会面临可能需要存储大量Session ID在服务器里面,但是如果有多台服务器,一台服务其存储了Session ID,又会面临分享Session ID给其他服务器,因为可能出现服务其的超载,需要分配一些用户到其他服务器,其他服务器需要通用的Session ID才能避免用户再次输入用户名和密码,但是服务器这样分享也不方便,于是就让数据库存储SessionID,但是如果数据库崩溃了,又会影响服务器获取Session ID,各种原因和需求的前提下,就出现了一种叫JWT的技术,就是(json web token)

token基本流程:

1.首先用户第一次登录网页,服务器

服务器生成一个JWT,服务器不需要保存这个JWT,只需要保存JWT签名的密文

2.服务器-->浏览器

接着服务器把JWT发送给浏览器

3.浏览器

浏览器以cookie或者storage的形式进行存储

假设浏览器以cookie的形式保存下来,这样用户每次请求都会把这个JWT发给服务器,用户就不需要重新输入账号密码了

token和session很类似,不同的是session存储在服务器端,token存储在用户那边

 

token的安全性:


JWT是由三部分组成的:

1.header:声明需要用什么算法生成标签

2.payload:是一些特定的数据,比如有效期之类的

3.signature

header和payload两部分的内容会经由Base64编码,(编码不是加密,很容易解码)

虽然JWT不保存在服务器这里,但是服务器需要爆出一段密码,这段密码需要结合两段编码进行算法运算,最终得到签名信息,这里使用的算法就是刚刚header声明的算法,签名的信息也就是signature部分了,这样一个完整的JWT就可以发送给客户端了

 三个部分是相关联的,因此JWT有一定的安全性

总结

session是诞生并保存在服务器那边的,有服务器主导一切

cookie是一种数据载体,把session放入cookie中送到客户端那边,cookie跟随http的每个请求发送出去

token是诞生在服务器但是保存在浏览器这边的,由客户端主导一切,可以放到cookie或者storage里面,持有token就像持有"令牌"一样可以允许访问服务器,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值