问心 | 再看token、session和cookie

news2024/11/25 9:28:47

什么是cookie

HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。

什么是session

Session 代表着服务器和客户端一次会话的过程。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当客户端关闭会话,或者 Session 超时失效时会话结束。

注意:浏览器关闭,会话并不一定结束。

什么是token

token 也称作令牌,由uid+time+sign[+固定参数]
token 的认证方式类似于临时的证书签名,并且是一种服务端无状态的认证方式,。非常适合于 REST API 的场景。所谓无状态就是服务端并不会保存身份认证相关的数据。

token组成:

  • uid: 用户唯一身份标识
  • time: 当前时间的时间戳
  • sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
  • 固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库

为什么有cookie和session

浏览器是没有状态的(HTTP 协议无状态),这意味着浏览器并不知道是张三还是李四在和服务端打交道。这个时候就需要有一个机制来告诉服务端,本次操作用户是否登录,是哪个用户在执行的操作,那这套机制的实现就需要 Cookie 和 Session 的配合。
cookie和session

根据图片中流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。

cookie被禁用了,流程还能正常进行吗

可以用 token 机制。
Token 机制多用于 App 客户端和服务器交互的模式,也可以用于 Web 端做用户状态管理。
Token ,“令牌”。是服务端生成的一串字符串,作为客户端进行请求的一个标识。Token 机制和 Cookie 和 Session 的使用机制比较类似:当用户第一次登录后,服务器根据提交的用户信息生成一个 Token,响应时将 Token 返回给客户端,以后客户端只需带上这个 Token 前来请求数据即可,无需再次登录验证。

区别在于:cookie会被自动携带,而token不会。而且 token 没有 4kb 限制,支持跨域。token 需要开发者处理后主动在 header 中传输,此时请求会变成 非简单请求

和cookie相比,token在安全性上有什么优势

token 可以避免 csrf 安全攻击
因为 form 发起的 POST 请求也并不受到浏览器同源策略的限制(具体可见笔者写过的这篇文章),因此可以任意地使用其他域的 Cookie 向其他域发送 POST 请求,形成 CSRF 攻击。在post请求的瞬间,cookie会被浏览器自动添加到请求头中。
但token不同,token是开发者为了防范 csrf 而特别设计的令牌,浏览器不会自动添加到 headers 里,攻击者也无法访问用户的 token ,所以提交的表单无法通过服务器过滤,也就无法形成攻击。

CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。但是 token 这种东西不是浏览器会自动携带的,所以能够避免。
误区!token不能避免xss攻击!因为一旦攻击被注入成功,无论 cookie 的获取还是 token 的解析都只是几行代码而已。针对 cookie的xss攻击只能通过浏览器安全头解决。

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

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

相关文章

Paddle项目调试记录

PaddlePaddle是百度公司提出的深度学习框架。近年来深度学习在很多机器学习领域都有着非常出色的表现,在图像识别、语音识别、自然语言处理、机器人、网络广告投放、医学自动诊断和金融等领域有着广泛应用。面对繁多的应用场景,深度学习框架有助于建模者…

MyBatis-Plus(狂神)

一.特点 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Serv…

GDB调试快速入门

什么是GDB: GDB - - - (GNU symbolic debugger)是Linux平台下最常用的一款程序调试器。 自己的Linux是否安装GDB? 一般来说,使用Ubuntu的话,系统就会自带的有GDB调试器的 命令窗口输入如下命令可以查看是否安装了gdb: gdb -v …

制作一个简单的信用卡验证表

下载:https://download.csdn.net/download/mo3408/87559584 效果图: 您可以从文章顶部附近的下载按钮获取该项目的完整代码。这些文件的概述如下所示: 我们需要将两个 .css 文件和两个 .js 文件包含在我们的 HTML 中。所有其他资源,例如 Bootstrap 框架、jQuery 和 Web 字…

SecureCRT 安装并绑定ENSP设备终端

软件下载链接链接:https://pan.baidu.com/s/1WFxmQgaO9bIiUTwBLSR4OA?pwd2023 提取码:2023 CRT安装:软件可以从上面链接进行下载,下载完成后解压如下:首先双击运行scrt-x64.8.5.4 软件,进行安装点击NEXT选…

PMP项目管理项目资源管理

目录1 项目资源管理概述2 规划资源管理3 估算活动资源4 获取资源5 建设团队6 管理团队7 控制资源1 项目资源管理概述 项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程,这些过程有助于确保项目经理和项目团队在正确的时间和地点使用正确的资源。…

Nacos未授权访问漏洞(CVE-2021-29441)

目录漏洞描述影响范围环境搭建漏洞复现声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律及连带责任。加粗样式 漏洞描述 Nacos 是阿里巴巴…

Redis缓存双写一致性

目录双写一致性Redis与Mysql双写一致性canal配置流程代码案例双写一致性理解缓存操作细分缓存一致性多种更新策略挂牌报错,凌晨升级先更新数据库,在更新缓存先删除缓存,在更新数据库先更新数据库,在删除缓存延迟双删策略总结双写一致性 Redis与Mysql双写一致性 canal 主要是…

vuex3的介绍与state、actions和mutations的使用

一、定义官网&#xff1a;Vuex 是什么&#xff1f; | Vuex (vuejs.org)Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。二、安装cdn<script src"/path/…

[手撕数据结构]栈的深入学习-java实现

CSDN的各位uu们你们好,今天千泽带来了栈的深入学习,我们会简单的用代码实现一下栈, 接下来让我们一起进入栈的神奇小世界吧!0.速览文章一、栈的定义1. 栈的概念2. 栈的图解二、栈的模拟实现三.栈的经典使用场景-逆波兰表达式总结一、栈的定义 1. 栈的概念 栈&#xff1a;一种…

Optimizers for Deep Learning

文章目录一、Some NotationsWhat is Optimization about?二、SGDSGD with Momentum(SGDM)Why momentum?三、AdagradRMSProp四、AdamSWATS [Keskar, et al., arXiv’17]Towards Improving AdamTowards Improving SGDMRAdam vs SWATSLookahead [Zhang, et al., arXiv’19]Momen…

[洛谷-P3047] [USACO12FEB]Nearby Cows G(树形DP+换根DP)

[洛谷-P3047] [USACO12FEB]Nearby Cows G一、问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示二、分析1、状态表示2、状态转移3、换根DP三、代码一、问题 题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this in…

【数据结构初阶】单链表面试题|内含链表带环问题

目录 前言 链表面试题 1. 删除链表中等于给定值 val 的所有节点。oj链接 2.反转一个单链表。oj链接 3. 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。oj链接 4. 输入一个链表&#xff0c;…

每天五分钟机器学习算法:贝叶斯算法中处理重复词语的三种方式

什么是重复词语? 我们预测一封邮件是否是垃圾邮件,前面已经介绍,我们需要对其进行分词处理,问题是分词处理之后很有可能有重复的词,那么这重复的词如何处理,这里我们介绍三种方式: 1.多项式模型 2.伯努利模型 3.混合模型 重复的情况举例 现在有一个垃圾邮件,它的内…

安装Linux虚拟机和Hadoop平台教程汇总及踩坑总结

&#x1f4cd;主要内容介绍安装Linux虚拟机、ubuntu系统、安装hadoop三个环节的教程链接介绍及本机与虚拟机的FTP传输教程总结&#xff08;直接找hadoop安装环节的5.filezilla传输文件&#xff09;新鲜出炉的踩坑总结和填坑指南安装Linux虚拟机和ubuntu系统一、材料和工具1、下…

站内SEO内容优化包括那些?

站内SEO优化是指优化网站内部结构&#xff0c;以提高搜索引擎对网站的识别和评价&#xff0c;从而提高网站在搜索引擎自然排名中的权重和位置。 站内SEO内容优化的目标是提高网站内容的质量和相关性&#xff0c;从而吸引更多的用户访问和留存。 以下是一些站内SEO优化的要点&…

Yolov5-交通标志检测与识别

项目介绍 上一篇文章介绍了基于卷积神经网络的交通标志分类识别Python交通标志识别基于卷积神经网络的保姆级教程&#xff08;Tensorflow&#xff09;&#xff0c;并且最后实现了一个pyqt5的GUI界面&#xff0c;并且还制作了一个简单的Falsk前端网页实现了前后端的一个简单交互…

C/C++内存管理讲解

c/C内存管理讲解 C/C内存分布 首先通过一些题目的引入讲解带大家走进C/C的内存分布。 eg1&#xff1a; 根据上述变量的定义&#xff0c;来判断它们所在的内存位置。 从接下来的4个选项中选出最佳答案填入&#xff08;注&#xff1a;可重复选&#xff09;。 A、栈 B、堆 C、数…

已知如下数据库表,写出查询各门课的分数最高者的SQL语句,要求格式为“科目,学生名,分数”,并按科目Id排序

题目描述 在某笔试题中遇到了这样的题目&#xff0c;之前学过数据库原理&#xff0c;但是这综合性太强&#xff0c;一下子犯了难。 解决过程 在数据库中建立上述表&#xff0c;以验证写的SQL对不对 平台&#xff1a;Navicate SQL 16 for MySQL 尝试写SQL查询 尝试1 …

CSS 扫盲

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录引入方式内部样式内联样式外部样式CSS 选择器CSS 常用属性值字体属性设置字体大小粗细文字样式文本属性文本颜色文本对齐文本装…