cookie、session、token学习笔记

news2024/11/15 21:34:57

一.cookie

1.什么是cookie?

Cookie用于存储web页面的用户信息。

Cookie是一些数据,存储于你电脑的文本文件中。

当web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息。

而Cookie的作用就是用于解决“如何记录客户端的用户信息”:

当用户访问web页面时,他的名字可以记录在cookie中。
在用户下一次访问该页面时,可以在cookie中读取用户访问记录。
当浏览器从服务器上请求web页面时,属于该页面的cookie会被添加到该请求中。服务端通过这种方式来获取用户的信息。

2.cookie属性

属性名称属性含义
namecookie 的名称
valuecookie 的值
commentcookie 的描述信息
domain可以访问该 cookie 的域名
expirescookie 的过期时间,具体某一时间
maxAgecookie 的过期时间,比如多少秒后 cookie 过期
pathcookie 的使用路径
securecookie 是否使用安全协议传输,比如 SSL 等
versioncookie 使用的版本号
isHttpOnly指定该 Cookie 无法通过 JavaScript 脚本拿到,比如 Document.cookie 属性、XMLHttpRequest 对象和 Request API 都拿不到该属性。这样就防止了该 Cookie 被脚本读到,只有浏览器发出 HTTP 请求时,才会带上该 Cookie。

3.cookie举例

132501dc740d4e23a0029909bcf53e77.png

上图可分为以下几步:

1.客户端发送请求到服务端(比如登录请求)。
2.服务端收到请求后生成一个 session 会话。
3.服务端响应客户端,并在响应头中设置 Set-Cookie。Set-Cookie 里面包含了 sessionId,它的格式如下:Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]。其中 sessionId 就是用来标识客户端的,类似于去饭店里面,服务员给你一个号牌,后续上菜通过这个号牌来判断上菜到哪里。
4.客户端收到该请求后,如果服务器给了 Set-Cookie,那么下次浏览器就会在请求头中自动携带 cookie。
5.客户端发送其它请求,自动携带了 cookie,cookie 中携带有用户信息等。
6.服务端接收到请求,验证 cookie 信息,比如通过 sessionId 来判断是否存在会话,存在则正常响应。

二.session

1.什么是session

session 由服务端创建,当一个请求发送到服务端时,服务器会检索该请求里面有没有包含 sessionId 标识,如果包含了 sessionId,则代表服务端已经和客户端创建过 session,然后就通过这个 sessionId 去查找真正的 session,如果没找到,则为客户端创建一个新的 session,并生成一个新的 sessionId 与 session 对应,然后在响应的时候将 sessionId 给客户端,通常是存储在 cookie 中。如果在请求中找到了真正的 session,验证通过,正常处理该请求。

总之每一个客户端与服务端连接,服务端都会为该客户端创建一个 session,并将 session 的唯一标识 sessionId 通过设置 Set-Cookie 头的方式响应给客户端,客户端将 sessionId 存到 cookie 中。

通常情况下,我们 cookie 和 session 都是结合着来用,当然你也可以单独只使用 cookie 或者单独只使用 session

下面为session简单示意图:

ed3b0c79b855404387549e9609ea6d24.png

2.常用API(应用程序接口)

名称作用
getId()得到sessionId
invalidate()让session立刻失效
getAttribute(String key)根据key获取该session中的value
setAttribute(String key,Object value)往session中存放key-value
removeAttribute(Stringkey)根据key删除session中的key-value
getServletContext()得到ServletContext
setMaxInactiveInterval(long timeout)/getMaxInactiveInterval设置/获取session的最大有效时间
getCreationTime获取session的创建的时间
getLastAccessedTime获取session最后一次访问的时间
getSession()从HttpServletRequest中获取session

3.session与cookie的区别

1).保存的位置不同
cookie保存在浏览器端,session保存在服务端。
2).使用方式不同
cookie如果在浏览器端对cookie进行设置对应的时间,则cookie保存在本地硬盘中,此时如果没有过期,则就可以使用,如果过期则就删除。如果没有对cookie设置时间,则默认关闭浏览器,则cookie就会删除。
session:我们在请求中,如果发送的请求中存在sessionId,则就会找到对应的session对象,如果不存在sessionId,则在服务器端就会创建一个session对象,并且将sessionId返回给浏览器,可以将其放到cookie中,进行传输,如果浏览器不支持cookie,则应该将其通过encodeURL(sessionID)进行调用,然后放到url中。
3).存储内容不同:cookie只能存储字符串,而session存储结构类似于hashtable的结构,可以存放任何类型。
4).存储大小:``cookie最多可以存放4k大小的内容,session则没有限制。
5).session的安全性要高于cooKie
6).cookie的session的应用场景:cookie可以用来保存用户的登陆信息,如果删除cookie则下一次用户仍需要重新登录
session就类似于我们拿到钥匙去开锁,拿到的就是我们个人的信息,一般我们可以在session中存放个人的信息或者购物车的信息。
7).session和cookie的弊端:cookie的大小受限制,cookie不安全,如果用户禁用cookie则无法使用cookie。如果过多的依赖session,当很多用户同时登陆的时候,此时服务器压力过大。sessionId存放在cookie中,此时如果对于一些浏览器不支持cookie,此时还需要改写代码,将sessionID放到url中,也是不安全。

三.token

1.什么是token?

token是“令牌”的意思。它不像cookie和session一样是一种web规范,而是服务端生成的一串字符串,以作客户端进行请求的一个标识。当第一次登录后,服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

2.token有什么用?

token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。说白了token是一个身份卡,有权限的作用。

使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。

大概的流程:

1).客户端使用用户名和密码请求登录。

2).服务端收到请求,验证用户名和密码。

3).验证成功后,服务端会生成一个token,然后把这个token发送给客户端。

4).客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。

5).客户端每次向服务端发送请求的时候都需要带上服务端发给的token。

6).服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

token还有防止爆破的作用,比如我之前打过的pikachu(皮卡丘)靶场的第一大关,详见我之前写过的pikachu靶场通关系列博客。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【unity每日一记】 三大金星之(音频Audio + 碰撞和触发+光源组件)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Kubernetes(k8s)部署模式发展

目录 1 简介2 物理单机(~2000)2.1 主要代表 3 虚拟化:初期(2001~2009)3.1 VMware3.2 laaS 4 虚拟化:成熟期(2010~至今)4.1 OpenStack4.2 虚拟化四巨头 5 容器化:(2013-至今)5.1 Dock…

【从零开始学习JAVA | 第十三篇】继承

目录 前言: 引入: 继承: 小拓展: 优点: 成员方法的继承问题: 总结: 前言: 继承是面向对象三大特性之一,它是在封装之后我们讲解的一个重要的性质,继承…

【Kubernetes资源篇】DaemonSet控制器入门实战详解

文章目录 一、DaemonSet控制器理论知识1、DaemonSet控制器是什么?2、DaemonSet控制器工作原理3、DaemonSet典型应用场景4、DaemonSet与Deployment的区别 二、案例:DaemonSet控制器实战演示1、使用DaemonSet部署日志收集组件2、DaemonSet管理Pod滚动更新 …

数据库期末复习大总结 数据库课程学习资料(包含数据库全部章节的经典例题)【我的数据库期末复习】

为刚开始上大学数据库课程 提供学习方向【我的数据库期末复习】 第一章 绪论1.1 数据库系统概述 第二章 关系数据库2.1 关系的基本概念2.2 关系的完整性 关系数据库标准语言SQL3.1.1 SQL创建模式和表3.1.2 SQL修改和删除表3.2.1 SQ单表查询3.2.2 分组聚合和分组过滤3.2.3 多表联…

Matplotlib---散点图

1. 散点图 scatter函数用于绘制散点图。下面是scatter函数的语法格式: scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, edgecolorsNone, **kwargs)参数解释: x:指定散点的…

【二分查找】详细图解

目录 一.什么是二分查找法? 二.算法要求 三.算法思想 图解(要找的数k的值为3) 参考代码 一.什么是二分查找法? 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是&am…

GEE:DYNAMICWORLD/V1数据集介绍

作者:CSDN @ _养乐多_ 本文将介绍GOOGLE/DYNAMICWORLD/V1数据集。 在Dynamic World数据集中,每个波段代表了某个特定类别的土地覆盖概率。这些概率表示了一个像素完全被某种土地覆盖类别所覆盖的可能性,其取值范围从0到1。每个波段的名称和描述指示了对应类别的土地覆盖类…

成为CSDN创作者的第2048天,我收获了什么?

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

linux下容器 安装 操作 介绍

介绍: 容器是一种轻量级的虚拟化技术,可以将应用程序及其依赖项打包到一个独立的运行环境中,从而实现快速部署、可移植性和可扩展性。容器可以在不同的操作系统和云平台上运行,使得应用程序的部署和管理变得更加简单和高效。 安…

八大指针笔试题带你overcome指针

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《C语言》专栏,本专栏是针对于大学生,编程小白精心打造…

pgsql序列的使用

大家都知道pgsql和mysql不同,mysql字段有有自增属性,pgsql并没有,但是pgsql和oracle一样有序列,很多人刚接触pgsql的时候,并不知道序列是什么,怎么用,下面这篇文章就介绍序列,并且怎…

Flutter系列(十一)实现商城首页和商品详情页

基础工程: Flutter系列(四)底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 一、前言 本文用flutter实现商城首页和商品详情页,效果如下图: 二、使用的组件 MasonryGridView.count 瀑布流插件&#xff…

几何引擎 约束求解器 3D仿真物理引擎 图形引擎

几何引擎 & 约束求解器 & 3D仿真物理引擎 & 图形引擎 1 介绍技术图谱建模主流CAD/CAM/CAE/AEC所用引擎 2 几何建模引擎2.1 介绍2.2 各家实现 3 图形引擎4 几何约束求解器4.1 介绍4.2 各家实现D-Cubed DCM(西门子)CGM(达索)LGS&am…

OpenGL模型控制(旋转、平移)

1.效果图 2.平移 首先做一个鼠标双击事件,表示平移模型对象,当然,我们需要遍历当前哪个模型对象被选中,才能进行该对象的平移操作。 void AXBOpemglWidget::mouseDoubleClickEvent(QMouseEvent *event) {Q_UNUSED(event);if(m_m…

团体程序设计天梯赛-练习集L1篇⑥

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

命令行编译C程序

目录 设置MSVC环境变量 C文件编译流程 编译 链接 学习起步之初,先用最基础的命令行工具进行学习 设置MSVC环境变量 这个是在VS2019下进行配置的,位置和你安装IDE的位置有关 MSVC D:\VS2019\IDE\VC\Tools\MSVC\14.29.30133WK10_INCLUDE C:\Program …

Android App安装弹窗显示流程

一、APP的安装 1、常见安装方式 系统应用和预制应用安装――开机时完成,没有安装界面,在PKMS的构造函数中完成安装 网络下载或第三方应用安装――调用PackageManager.installPackages(),有安装界面。 ADB工具安装――没有安装界面&#xf…

社交登陆成功回调

1. 点击跳转至第三方授权 2. 这是使用gitee作为第三方授权进行验证 3. 授权成功则跳转至 redirect_url 4. 社交登陆回调逻辑 一、根据第三方授权提供的方式获取token (1)发送请求获取code码(每次发送请求,code码会改变&#xff…

构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录 前言一、零信任安全模型的概念以及背景介绍二、传统安全模型(边界模型)三、零信任模型(现阶段主流云厂商策略)四、Azure 中的零信任体系结构(本文重点)4.1 基础知识点(必须了解&#x…