当前位置:首页 > 服务端 > Cookie、Session和Token认证

Cookie、Session和Token认证

2022年08月05日 22:45:57服务端8

目录

Cookie

Session认证机制

Session的一些安全配置

Token认证机制

Token预防CSRF

Session认证和Token认证的区别


前言:HTTP是一种无状态的协议,为了分辨链接是谁发起的,需要浏览器自己去解决这个问题。不然有些情况下即使是打开同一个网站的不同页面也都要重新登录。而Cookie、Session和Token就是为了解决这个问题而提出来的两个机制

用户通过浏览器登录一个网站,在该浏览器内打开网站其他页面时,不需要重新登录。而HTTP是无状态的协议,那么网站后端是如何判断用户已经登陆了呢?不同的网站,判断用户登录状态的方法都不一样。有的网站是通过session来验证用户的登录状态,有的网站是通过token来验证用户的登录状态,也有的网站是通过其他的方式来判断。本文讲了两个比较常用的方法,利用session或token来验证用户登录状态。

Cookie

Cookie:cookie是服务器发送给客户端的用于验证某一会话信息的数据,cookie中有很多字段。不同网站Cookie中字段是不一样的,是由服务器端设置的。Cookie中常放入session_id 或者 token 用来验证会话的登录状态。

Cookie为什么能验证登录状态?那是因为cookie中放入了session_id 值或者 token 值!

cookie的分类

  • Session Cookie:key, value形式,过期时间可设置,如不设,则浏览器关掉就消失了,存储在内存当中,否则就按设置的时间来存储在硬盘上的,过期后自动清除
  • Permenent Cookie:Cookie的主要内容包括:名字,值,过期时间,路径和域等等

Session Cookie: 我们打开一个浏览器访问某个网站,该网站服务器就会返回一个Session Cookie,当我们访问该网站下其他页面时,用该Cookie验证我们的身份。所以,我们不需要每个页面都登录。但是,当我们关闭浏览器重新访问该网站时,需要重新登录获取浏览器返回的Cookie。Session Cookie在访问一个网站的过程中,一般是不变化的,有时也会变化,比如,切换不同的权限时,Cookie值会变化。

如下图,是Session Cookie的生成和作用

Cookie、Session和Token认证 _ JavaClub全栈架构师技术笔记

在整个会话过程中,cookie主要的值是不变化的,某些值会变化。如图,是DVWA不同等级之间用户的Session cooke。

Cookie、Session和Token认证 _ JavaClub全栈架构师技术笔记

Permenent Cookie 是保存在浏览器客户端上存储用户登录信息的数据,Permenent  Cookie是由服务器端生成,然后发送给User-Agent(一般是浏览器),浏览器会将Cookie保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie,大部分浏览器默认都是开启了cookie)。

例如,下面的截图是保存的baidu.com域名下的 Permenent Cookie。

Cookie、Session和Token认证 _ JavaClub全栈架构师技术笔记

Session认证机制

Session:session是保存在服务器端的经过加密的存储特定用户会话所需的属性及配置信息的数据。当我们打开浏览器访问某网站时,session建立,只要浏览器不关闭(也有时间限制,可以自己设置超时时间),这个网站就可以记录用户的状态,当浏览器关闭时,session结束。

  • 浏览器第一次发送请求时,服务器自动生成了Session(用户会话所需的属性及配置信息),并且生成了Session ID来唯一标识这个Session,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求的Cookie中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户所对应的Session,从而知道了用户的登录信息。一般Session ID会有时间限制,超时后毁掉这个值,默认30分钟。
  • 当用户在应用程序的 Web页间跳转时,也就是一次会话期间,浏览器不关闭时,Session ID是一直不变的。

Cookie、Session和Token认证 _ JavaClub全栈架构师技术笔记

SessionID除了可以保存在Cookie中外,还可以保存在URL中,作为请求的一个参数(sid)。

Session的一些安全配置

  • session应该设置时效性,比如半个小时,当用户在半小时内未操作,即清除session
  • 关闭浏览器,即清除session
  • 如果应用为了用户体验,只要session一直在使用,则session不失效。这样,当用户cookie被盗后,可能导致session保持攻击。这样的做法是:(1) 给session设置一个时间,无论该session活动与否,都强制清除session。(2) 用户的IP、UserAgent等信息变化后,强制清除session。

Token认证机制

Token:Token是服务器端生成的用于验证用户登录状态的加密数据,和用session验证差不多。只不过Token验证服务器端不需要存储用户会话所需的配置等数据。只需要后端将Token进行验证签名,然后再发给浏览器。所以,使用Token进行验证,在一次会话中,Token值是不变化的,这和session一样。

Cookie、Session和Token认证 _ JavaClub全栈架构师技术笔记

Cookie、Session和Token认证 _ JavaClub全栈架构师技术笔记

Token预防CSRF

上面利用Token验证是将Token值放在Cookie中用来验证用户登录状态,而我们现在要利用Token来预防CSRF的话,就不能将Token值放在CSRF中了。我们可以如下做:

当我们访问的网页中含有需要修改数据的地方,后端服务器就会随机发送一个Token值给前端,然后我们修改完数据提交的请求包中,就会有该token字段,后端提取该token验证登录状态。当我们每次访问该网页或者其他修改数据的网页时,服务器端返回的Token值都是不同的,都是随机的。这样,可以有效预防CSRF。

相关文章:DVWA之CSRF(High级别)

                  CSRF(跨站请求伪造)

Session认证和Token认证的区别

现在大多数网站用户认证都是基于 session 的,即在服务端生成用户相关的 session 数据,而发给客户端 sesssion_id 存放到 cookie 中,这样用客户端请求时带上 session_id 就可以验证服务器端是否存在 session 数据,以此完成用户认证。这种认证方式,可以更好的在服务端对会话进行控制,安全性比较高(session_id 随机),但是服务端需要存储 session 数据(如内存或数据库),这样无疑增加维护成本和减弱可扩展性(多台服务器)。 CSRF 攻击一般基于 cookie 。

基于 token 的用户认证是一种服务端无状态的认证方式,服务端不用存放 token 数据。用户验证后,服务端生成一个 token(hash 或 encrypt)发给客户端,客户端可以放到 cookie 或 localStorage 中,每次请求时在 Header 中带上 token ,服务端收到 token 通过验证后即可确认用户身份。这种方式相对 cookie 的认证方式就简单一些,服务端不用存储认证数据,易维护扩展性强, token 存在 localStorage 可避免 CSRF 。不过这种方式在加密或解密的时候会有一些性能开销(好像也不是很大),有些对称加密存在安全隐患(aes cbc 字节翻转攻击)。

作者:谢公子
来源链接:https://blog.csdn.net/qq_36119192/article/details/84977902

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/18087.html

分享给朋友:

“Cookie、Session和Token认证” 的相关文章

session,ajax 跨域cookie

 什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来存取服务器端的Session存储空间。而SessionID这一数据则...

cookie窃取和session劫持

cookie窃取和session劫持

【转】cookie窃取和session劫持 Updates 2014-08-17 感谢@搞前端的crosser的提醒,加入了HTTP Response Splitting的内容。 此篇文章的Presentation戳这里。 一、cook...

session、cookie与“记住我的登录状态”的功能的实现

Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能。 Cookie的Domain和Path属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的Expires...

浅谈Cookie和Session的初步理解

浅谈Cookie和Session的初步理解 前言        HTTP是无状态的协议,客户每次读取web页面时,服务器都打开新的连接,而且服务器也不会自动维护客户的上下文...

HTTP协议-Cookie和Session详解

HTTP协议-Cookie和Session详解

前言: 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的跟踪技术就是Cookie和Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器记录确定用户身份。 本章将系统的讲述Cookie和Sessio...

你必须知道的session与cookie

你必须知道的session与cookie

Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的,而http协议本身是无状态的,那么问题来了服务器端是怎么验证客户端身份的? 答:服务器端和客户端验证的联系就是s...

Cookie和Session的区别与联系

Cookie和Session的区别与联系

Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Sessio...

cookie、session、token之间的关系

cookie、session、token之间的关系

 Cookie机制 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie。Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。接下来我们描述一下Cookie产生的过程。浏览器第一次...

APPlication,Session和Cookie的区别

APPlication,Session和Cookie的区别

  方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。