cookie session token

为什么会发明cookie session token?

因为http协议是无状态的,每次客户端访问服务器端,服务器都不知道是谁来访问了它。这在过去也不需要知道是谁,用户向服务器请求想看的页面,服务器响应返回。但是现在交互式网页的产生,使得服务器需要知道是哪个用户访问了,比如购物网站。这时就必须搞清楚谁是谁的问题了。

Cookie

(1)什么是cookie?

Cookie是服务器用来辨认客户端身份的文本信息。由于HTTP是无状态的,也就是服务端并不知道发来请求的客户端是谁。但在某些时候需要知道客户端身份,这时服务器会给客户端颁发一个Cookie。客户端浏览器会将Cookie保存起来,下次向该网站请求时将其附加上,服务器根据其保存的信息确定是哪个客户端。举个例子:比如向某网站申请了账号,自己设置了密码,下次请求时服务器就能分辨出你是哪个用户了,这样就可以实现自动登录。
在这里插入图片描述
正如上图所示,客户端向服务器发送请求—>服务器发送响应给客户端,并为其生成Cookie,通过Set-cookie将其贴到用户身上(如图中的识别码34294)---->浏览器将此Cookie保存在浏览器的cookie数据库中,下次再请求时,浏览器根据此请求网站再贴上对应的cookie。注意cookie的内容不一定是识别码,可以是name,phone等,是以键值对的形式存在。
(2)cookie的内容
在这里插入图片描述
在这里插入图片描述
(3)HttpOnly:是加在cookies上的一个标识,用于告诉浏览器不要向客户端脚本(document.cookie或其他)暴露cookie。当你在cookie上设置HttpOnly标识后,浏览器就会知会到这是特殊的cookie,只能由服务器检索到,所有来自客户端脚本的访问都会被禁止。

Session

(1)什么是session?

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。所以Session是在服务端。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了
(2)Session与Cookie的区别
a) session保存在服务器,这个数据可以保存在集群、数据库、文件中,cookie在浏览器
b) 虽然session保存在服务器,但是它的正常运行仍然需要客户端浏览器的支持。这是因为session需要使用cookie作为识别标志。HTTP协议是无状态的,session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为SESSIONID的cookie,它的值为该Session的id。Session依据该cookie来识别是否为同一用户。对于不支持cookie的手机浏览器,有另一种解决方案:URL地址重写。URL地址重写的原理是将该用户session的id信息重写到URL地址中,服务器能够解析重写后的URL获取session的id。这样即使客户端不支持cookie,也可以使用session来记录用户状态。

token

(1)为什么要发明token?

因为之前基于session的认证方式存在一定的弊端:

  • 服务器需要存储很多session,进而占用很大内存。
  • 可扩展性问题,如果一台服务器损坏,为不影响用户访问,需要拷贝所有session到另一台服务器。
  • 安全性方面:很容易受到跨站请求伪造(CSRF)的攻击。
  • 跨域资源共享成为问题

token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

(2)token的原理
在这里插入图片描述
这张图已经说的很清楚了!

  • 用户输入用户名和密码登录,向服务器请求信息
  • 服务端经过校验和认证返回token
  • 客户端存储token,并在下次访问该网站时带上token
  • 服务端采用过滤器校验,校验成功则正确返回响应,不成功则返回错误码

这个过程不用将用户信息存储在服务器中,并且服务器增减机器都不会影响用户的访问,只要过滤器是一样的就OK。
(3)token的优点
安全性,可扩展性,跨域请求
(4)常用的token认证方案:JWT – JSON WEB TOKEN
https://www.cnblogs.com/xuxinstyle/p/9675541.html(讲的不错)
(5)为什么token能抵御CSRF的攻击?
之前的session是发布给用户一个session-id与服务端的session进行核对。成功则认证成功。token是服务端并不存储对应的token能与之核对,只是有个算法能为用户颁布签名,一个用户去访问服务器,服务器就会知道这是否是自己颁布的签名,如果此时有伪造网站拦截了请求报文,虽然能得到其请求报文,但是里面的token无法伪造(里面有个密钥,只有服务器自己知道)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值