cookie、session、和token身份认证的区别——用户身份标识

http一种无状态协议,即客户端与服务端的通信都必须再次与服务端链接,但是这里就有一个问题,如何判断两次发送请求的人是同一个人,服务器但从网络链接上不知道客户的身份,主要是通过颁发通行证来确认客户的身份。

首先来说一下cookie、session、token存在的作用和必要性

1.cookie、session、token都是用于客户端到服务端之间互相访问的用户标识,需要知道发起请求的客户端是否是用户自己发起的,所以才出现了cookie、session、token,就像让每个客户端即登录这台客户端的用户有自己的用户身份标识。

cookie:

cookie是浏览器中存储的一种数据,是浏览器实现一种数据存储功能,由服务器颁发给客户端,cookie保存时间可以在程序中设置,如没设置保存时间,浏览器关闭cookie自动消失。

cookie有存储大小限制,4KB左右

浏览器每次请求都会携带cookie在请求头中,这个可以用bp抓包查看

字符编码未Unicode,不支持直接存储中文

数据可以被轻易查看

cookie属性:

属性名称属性含义
namecookie的名称
valuecookie的值
commentcookie的描述信息
domain可以访问该coojie的域名
expirescookie的过期时间,具体的某一时间
maxAgecookie的过期时间,比如多少秒后cookie过期
pathcookie的使用路径
securecookie是否使用安全协议传输,如ssl等
versioncookie使用的版本号
isHttpOnly指定该cookie无法通过JavaScript脚本拿到,比如Document.cookie属性、XMLHttpRequest对象和Reqest API都拿不到该属性。这样防止cookie被脚本读取,浏览器发出http请求时,才会带上该cookie

cookie工作原理:

客户端向服务器发送请求,服务器向客户端颁发cookie以记录该用户的状态,客户端把从浏览器颁发的cookie保存起来,当浏览器再次请求该网站时,浏览器把请求的地址跟cookie一起发给服务器,服务器再检查cookie,来辨别用户状态,服务器还可根据需求修改cookie内容。

客户端向服务器发送请求,服务器向客户端颁发cookie记录该用户的状态,客户端收到浏览器颁发的cookie保存起来,来辨认用户状态,服务器还可根据需求修改cookie内容

1.客户端到服务端:发送登录请求

2.服务端到客户端:响应请求并设置响应头set-cookie

3.客户端再次发送请求:发送其它请求并自动携带cookie

4.服务端通过客户端的请求:cookie验证通过正常响应请求

 cookie功能需要浏览器支持,如果浏览器不支持cookie或者把cookie禁用了,cookie功能会失效,不同浏览器采用不同方式保存cookie,如:IE浏览器会以文本文件形式保存,一个文本文件保存一个cookie

同时cookie具有不可跨域名性,浏览器判断一个判断是否能能操作另一个网站cookie的依据是域名

cookie的几个特点:

cookie存储在客户端

cookie不可跨域,如果设置了domain,那么是可以在一级域名和二级域名之间共享的

session:客户端信息session保存在服务器上

session就是会话的意思,主要有服务端创建,主要作用是用于保存sessionld,用户与服务端之间的权限确认主要是通过sessionld。

session由服务端创建,当请求发送到服务端时,服务器会检索请求丽是否包含sessionld标识,如包含sessionld,则代表服务端已经和客户端创建过session,可以通过这个sessionld去查找真正的session,如没找到,则为客户端创建一个新的session,并生成一个新的sessionld与session对应,然后在响应的时候将seeionld给客户端,通常时存储在cookie中。如果请求中找到真正的session,验证通过,正常处理该请求。

session是另一种记录客户状态机制,但cookie保存在客户端浏览器中,而session保存在服务器上上,客户浏览访问服务器时候,服务器把客户端信息记录在服务器上,这就是session,客户端浏览器再次访问时只需要从服务器存储的session中查找该客户的记录

总结:每一个客户端与服务端连接,服务端都会为该客户端创建一个session,并将session的唯一标识seesionld通过设置Set-Cookie头的方式响应给客户端,客户端将sessionld存到cookie中。

一般来说,cookie是结合session来使用的,也可以单独使用cookie或者session。

客户端和服务端通信时cookie和session的创建使用过程:

1.客户端访问服务端:客户端发送登录请求到服务端

2.服务端到客户端:创建一个session,并将session的唯一标识sessionld设置在Set-Cookie响应头中,响应给客户端

3.客户端到服务端:发送其它请求并自动携带cookie,服务端通过sessionld找到session,没有找到session则重新创建session

4.服务端到客户端:cookie验证通过正常响应请求

cookie与session的区别

1.cookie与session是通过sessionld关联的,sessionld是设置在Set-Cookie响应头中,客户端将sessionld存在cookie中。session是基于cookie实现的。

session比cookie更加安全,因为存储在服务端,cookie存储在客户端

cookie只支持存储字符串数据,session可以存储任意数据

cookie有效期可以设置较长时间,session有效期都比较短

session存储空间很大,cookie有限制

鉴权:可单独使用cookie,也可单独使用session,建议结合两者使用。

cookie与session认证的缺点

session比cookie更加安全,因为是存储在服务端,cookie是存储在在客户端的

cookie只支持存储字符串数据,session可以存储任意数据

cookie的有效期可以设置较长时间,session有效期都比较短

session存储空间大,cookie有限制

系统鉴权:可以单独使用cookie,也可以单独使用session,建议两者结合使用

token:

什么是token:

token是一段被加密后的字符串,通常使用uid(用户唯一标识),时间戳,签名以及一些其他参数加密而成,将token进行解密就可以拿到如uid这种信息,然后通过uid进行鉴权操作

token如何生成:

token是由服务器生成,然后返回给客户端,客户端手动把token存下来,如利用localstorage或者直接存储到cookie中

token认证:

1.客户端发起登录请求,如用户输入用户名和密码登录后

2.服务端校验用户名和密码,将用户id和其它信息进行加密,生成token

3.服务端将token响应给客户端

4.客户端收到响应后将token存储下来

5.下一次发送请求后需要将token携带上,比如放在请求头中或其它地方

6.服务端token后检验,校验通过则正常返回数据

 cookie、session、token的总结

cookie、session、token都是用来鉴权认证的方式

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值