token,session,cookie
2017-04-23 17:10
447 查看
通俗的来说就是暗号(一串字符串或者别的),这个暗号可以用来做很多事,最常做的是身份验证。
基于session的网站身份验证流程:(传统验证流程)
因为http协议是无状态的,用户在利用账号密码登陆验证后,后面的请求,服务器无法验证用户的身份,所以,在登陆后,服务器会给客户端发session(会过期),存在cookie里,客户端登陆后的请求都带有这个session,服务器校验session,如果通过,就返回相应信息。
基于token的身份验证流程:
token也一样。
客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个Token,再把这个Token发送给客户端
客户端收到Token以后可以把它存储起来,比如放在Cookie里或者LocalStorage里
客户端每次向服务端请求资源的时候需要带着服务端签发的Token
服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据
一个通用的标准webtoken:JSONWebTokens
长这样:
构成:
header.PayLoad.Signature
header:
一个是Token的类型,另一个是使用的token加密算法
iss:Issuer,发行者
sub:Subject,主题
aud:Audience,观众
exp:Expirationtime,过期时间
nbf:Notbefore
iat:Issuedat,发行时间
jti:JWTID
是客户端生成的,理论上用来存储一些额外页面信息。
会存在客户端请求包的header里
session:
基于session的网站身份验证流程:(传统验证流程)
因为http协议是无状态的,用户在利用账号密码登陆验证后,后面的请求,服务器无法验证用户的身份,所以,在登陆后,服务器会给客户端发session(会过期),存在cookie里,客户端登陆后的请求都带有这个session,服务器校验session,如果通过,就返回相应信息。
基于token的身份验证流程:
token也一样。
客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个Token,再把这个Token发送给客户端
客户端收到Token以后可以把它存储起来,比如放在Cookie里或者LocalStorage里
客户端每次向服务端请求资源的时候需要带着服务端签发的Token
服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据
一个通用的标准webtoken:JSONWebTokens
长这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
构成:
header.PayLoad.Signature
header:
一个是Token的类型,另一个是使用的token加密算法
{ "typ":"JWT", "alg":"HS256" } Payload:
iss:Issuer,发行者
sub:Subject,主题
aud:Audience,观众
exp:Expirationtime,过期时间
nbf:Notbefore
iat:Issuedat,发行时间
jti:JWTID
Header和Payload都要编码成一个字符串 Signature: JWT的最后一部分是Signature,这部分内容有三个部分,先是用Base64编码的header.payload,再用加密算法加密一下,加密的时候要放进去一个Secret,这个相当于是一个密码,这个密码秘密地存储在服务端。
varencodedString=base64UrlEncode(header)+"."+base64UrlEncode(payload); signature=HMACSHA256(encodedString,'secret)
Cookie:
http无状态下,浏览器客户端为了维持客户端和服务器会话状态的字段(字符串),Cookie的内容也是明文保存的,有些浏览器提供界面修改,所以,不适合保存重要的或者涉及隐私的内容。
是客户端生成的,理论上用来存储一些额外页面信息。
会存在客户端请求包的header里
session:
http无状态下,服务器为了维持客户端和服务器会话状态的字段(字符串),一般用cookie来传递 因为会占用服务器的内存,所以最好用来存一下重要的信息,如登陆信息。
相关文章推荐
- Token ,Cookie和Session的区别
- Cookie && Session && Token
- session、token、cookie的区别
- 关于模拟登陆的小结-抓包、cookie、session和token
- Session&Cookie&token
- cookie,session和token的区别和应用场景
- Session ID/session token 及和cookie区别
- cookie、session和token那些事
- session 、cookie、token的区别
- Cookie、Session、Token
- cookie/session/token的区别与联系
- Cookie && Session && Token
- cookie,session,token
- cookie、session、token的理解
- Session ID/session token 及和cookie区别(转)
- Django系列7---cookie、session、json、csrf_token
- Session,Cookie,Token的区别
- Server ——Token、Session与Cookie的区别
- cookie、session与token