Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?

Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?

用户是如何保持登录状态的呢?今天向大家介绍一下困扰我很久我想去了解的保持登录的方法 Session Cookie Token 三者都是基于Cookie但是大不相同。
在这里推荐 技术蛋老师 的视频
Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?_哔哩哔哩_bilibili

1.Http无状态

HTTP无状态协议,是指协议对于事务处理没有记忆 能力 。 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。 另一方面,在服务器不需要先前信息时它的应答就较快。 客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。

2.Cookie

我的理解:Cookie是将用户的信息存储在客户端,每次发送Http请求时都会携带Cookie判断用户是否登录。但是未经加密不安全(感觉可以加密 只要加密方式只有自己知道就可以)。

深入理解Cookie - 简书 (jianshu.com)

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

在本地保存不安全

当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个步骤:

客户端发送一个请求到服务器 --》 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部 --》 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部 --》服务器返回响应数据

img

为了探究这个过程,写了代码进行测试,如下:

在doGet方法中,new了一个Cookie对象并将其加入到了HttpResponse对象中

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        Cookie cookie = new Cookie("mcrwayfun",System.currentTimeMillis()+"");
        // 设置生命周期为MAX_VALUE
        cookie.setMaxAge(Integer.MAX_VALUE);
        resp.addCookie(cookie);
    }

浏览器输入地址进行访问,结果如图所示:

img

image

可见Response Headers中包含Set-Cookie头部,而Request Headers中包含了Cookie头部。name和value正是上述设置的。

4. cookie属性项

属性项属性项介绍
NAME=VALUE键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样
Expires过期时间,在设置的某个时间点后该 Cookie 就会失效
Domain生成该 Cookie 的域名,如 domain=“www.baidu.com
Path该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/
Secure如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie
Expires

该属性用来设置Cookie的有效期。Cookie中的maxAge用来表示该属性,单位为秒。Cookie中通过getMaxAge()和setMaxAge(int maxAge)来读写该属性。maxAge有3种值,分别为正数,负数和0。

如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中(每个浏览器存储的位置不一致)。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效

Cookie的域名

Cookie是不可以跨域名的,隐私安全机制禁止网站非法获取其他网站的Cookie。

正常情况下,同一个一级域名下的两个二级域名也不能交互使用Cookie,比如test1.mcrwayfun.com和test2.mcrwayfun.com,因为二者的域名不完全相同。如果想要mcrwayfun.com名下的二级域名都可以使用该Cookie,需要设置Cookie的domain参数为**.mcrwayfun.com**,这样使用test1.mcrwayfun.com和test2.mcrwayfun.com就能访问同一个cookie

一级域名又称为顶级域名,一般由字符串+后缀组成。熟悉的一级域名有baidu.com,qq.com。com,cn,net等均是常见的后缀。
二级域名是在一级域名xxx下衍生的,比如有个一级域名为xxx.com,则blog.xxx.com和www.xxx.com均是其衍生出来的二级域名。

Cookie的路径

path属性决定允许访问Cookie的路径。比如,设置为"/"表示允许所有路径都可以使用Cookie

3.Session

我的理解:Session是将用户信息存储在服务器端,当用户第一次登录时(没有Cookie发送),在后台生成唯一的Session ID对应一个用户信息,将SessionID加入Cookie中。 用户携带SessionID登录时,在服务端查找即可。缺陷:用户量较大时,服务端需保存大量数据。与Cookie相比较为安全。

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。

Session工作原理

1.当某个用户向服务器发送第一个请求时,服务器为其建立一个sesion,并为此session创建一个标识号(sessionID);

2.这个用户随后的所有请求都应包括这个标识号(sessionID),服务器会校对这个标识号以判断请求是属于哪个session的;

3.sessionID标识号有两种实现方式:Cookie和URL重写;

4.Cookie是将数据直接保存在客户端,而Session是将数据保存在服务端,所以Session的安全性更佳。

img

Session ID 保存在服务器中或者数据库中

一个 Session ID 对应一个 已登录用户

4.Token

我的理解:Token保存在Cookie中,在用户第一次登录时(无Cookie发送),服务端会根据特定算法生成Token(加密数据 仅服务端可解密)保存在Cookie。在用户携带Token登录时,服务端解密Token对用户状态进行判断。使用JWT相对安全,且缓解服务器压力,结合Cookie与Session。

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。基于 Token 的身份验证. 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。流程是这样的:1.客户端使用用户名跟密码请求登录. 2.服务端收到请求,去验证用户名与密码。 3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端。

JSON Web Token

JWT由三部分组成: header.payload.signature

header:使用什么算法加密 例:{“alg”:“HS256”,“typ”:“JWT”}

payload: 存储想要保存的信息 {“name”:“snowman”,“password”:“123”}

signature: 使用header中声明的算法,将header与payload进行base64编码后结合两种编码生成唯一特定的签名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值