问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一篇文章带你走进cookie,session,Token的世界

发布网友 发布时间:2022-10-22 23:36

我来回答

1个回答

热心网友 时间:2024-05-30 09:11

前言

一天,你有个需求,你要去超市买一瓶可乐。 到了超市买了可乐,你告诉售货员,下次给我准备下雷碧,我下次来拿。 第二次,你去超市拿雷碧,售货员说他不记得你什么时候说要准备雷碧。 这次你学聪明了,售货员给你写了个纸条,上面有超市的章印,下次你带着纸条来,买上了超市 给你准备的雷碧

cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据。跟服务器没啥关系,仅仅是浏览器实现的一种数据存储功能。

cookie由服务器生成,发送给浏览器,浏览器把cookie以KV形式存储到某个目录下的文本文件中,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些*确保cookie不会被恶意使用,同时不会占据太多磁盘空间。所以每个域的cookie数量是有*的。

不管你是请求一个资源文件(如html/js/css/图片), 还是发送一个ajax请求, 服务端都会返回response.而response header中有一项叫set-cookie, 是服务端专门用来设置cookie的;

HTML5提供了两种本地存储的方式 sessionStorage 和 localStorage;

在上面我们了解了什么是Cookie,既然浏览器已经通过Cookie实现了有状态这一需求,那么为什么又来了一个Session呢?这里我们想象一下,如果将账户的一些信息都存入Cookie中的话,一旦信息被拦截,那么我们所有的账户信息都会丢失掉。所以就出现了Session,在一次会话中将重要信息保存在Session中,浏览器只记录SessionId一个SessionId对应一次会话请求。

这里我们写一个新的方法来测试Session是如何产生的,我们在请求参数中加上HttpSession session,然后再浏览器中输入http://localhost:8005/testSession进行访问可以看到在服务器的返回头中在Cookie中生成了一个SessionId。然后浏览器记住此SessionId下次访问时可以带着此Id,然后就能根据此Id找到存储在服务端的信息了。

此时我们访问路径http://localhost:8005/testGetSession,发现得到了我们上面存储在Session中的信息。那么Session什么时候过期呢?

既然我们知道了Session是在服务端进行管理的,那么或许你们看到这有几个疑问,Session是在在哪创建的?Session是存储在什么数据结构中?接下来带领大家一起看一下Session是如何被管理的。

Session的管理是在容器中被管理的,什么是容器呢?Tomcat、Jetty等都是容器。接下来我们拿最常用的Tomcat为例来看下Tomcat是如何管理Session的。在ManageBase的createSession是用来创建Session的。

到此我们明白了Session是如何创建出来的,创建出来后Session会被保存到一个ConcurrentHashMap中。可以看StandardSession类。

到这里大家应该对Session有简单的了解了。

1、什么的Token

Token是首次登陆时由服务器下发,作为客户端进行请求的一个令牌,当交互时用于身份验证的一种验证机制,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

2、Token的作用

3、Token身份认证的过程

4、Token的存储位置

优点:没有时间*的存储,会一直存放在浏览器中。

缺点:由于LocalStorage 可以被 javascript 访问,所以容易受到XSS攻击。所以可以在一个统一的地方复写请求头,让每次请求都在header中带上这个token, 当token失效的时候,后端会返回401,这个时候在你可以在前端代码中操作返回登陆页面,清除localstorage中的token。(适用于 ajax请求或者 api请求,可以方便的存入 localstorage)另外,需要应用程序来保证Token只在HTTPS下传输。

优点:可以防止 csrf攻击,因为 csrf只能在请求中携带 cookie,而这里必须从 cookie中拿出相应的值并放到 authorization 头中。实际上cookie不能跨站(同源策略)被取出,因此可以避免 csrf 攻击。(适用于 ajax请求或者 api请求,可以方便的设置 auth头)

5、Token处理过期时间

在我的vue项目中,我将Token存储在了localStorage中,有处理过Token过期,我是这样做的:

cookie,session,Token没有绝对的好与坏之分,只要还是要结合实际的业务场景和需求来决定采用哪种方式来管理回话,当然也可以三种都用。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 从新余北到郑州火车列车有哪些车次 列车时刻表查询 长沙到沈阳 坐火车 第T14次列车 的上、中、下铺票价分别是多少?_百度... T14列车时刻表 从郴州坐T14次火车到山海关会经过北京吗? 酷我音乐绑定了怎么解除 已有酷我音乐账号怎么绑定手机号微博号 确认为合同履约成本的条件有哪些 李咏女儿近照曝光,小时候被称为“最丑星二代”,如今亭亭玉立,长相如何... 重庆五一高级技工学校怎么样? 漠河自驾游车辆要求 特斯拉中国待遇 特斯拉日入两亿,给工人开出12万年薪,为何会被同行投诉? 杭州最低生活保障标准,杭州最低生活保障申请条件流程 做模似期货能否开通掌上财富 掌上财富哪里有免费下载的? 10元冲100话费是真是假 我的腰很硬,弯不下去,怎么回事?18岁才 榕树生根的正确方法 怎么让榕树生根 早晨的公园作文 教师如何引导幼儿观察一棵大榕树? 无花果在什么季节成熟 无花果成熟的季节 慰问病人鲜花祝福语 《我欲封天》经典语录 mc麻木2021语录 中国科学院量子信息重点实验室的研究进展 已成功使用量子点按需光子进行隐形态传输! 量子光子学迎来突破 有望开创强大光学电路新时代 酷喵影视云设备绑定在哪 数学猜谜语及答案 腾讯会议转文字收费了 ...2k或者4k可挂壁 无音响,8kg以下支持typec的显示器 做设计用_百度知 ... 男女朋友三观不一致怎么办? 伴侣之间,真的存在三观不合吗? 跟伴侣相处久了,发现三观不合,是分手还是继续? 阿胶何时吃合适 科普小知识送给你 怀孕几个月可以吃阿胶 OPPOReno3通话中自动中断怎么办 OPPO总是通话中断怎么解决 六年级语文上册教学反思 ...拜托学长学姐告诉我需要带的一些生活用品比如被子什么的 哎呦我是要... 如何简单地画小丑