三个好基友Cookie、Session和Token

news2024/11/17 3:34:21

原创声明,转载请注明文章链接来源、作者信息

>三个好基友Cookie、Session和Token

hello,我是索奇~

精心写了一篇Cookie、Session和Token的 vivid 文章,并分享给大家

我们可以把Cookie、Token和Session看作是三个好基友,它们都是用来跟踪用户的身份和状态的,但是它们之间有一些区别和使用场景。

Cookie

  • Cookie:曲奇饼,小甜饼;……样的人;(浏览网页后存储在计算机的)缓存文件;<苏格兰>淡面包;漂亮的女孩

    啊,不是让你翻译~ 是让你介绍计算机中Cookie~(不过也学会了一个单词)

Cookie就像是你的小秘书,它的主要作用是保存用户的偏好和浏览历史。比如说,你在网上买了一件衣服,但是还没决定是否买下,这时候你可以把这件衣服放进购物车,Cookie就会帮你记住这个购物车里有什么。等到你下次再来这个网站的时候,Cookie就会帮你把购物车里的东西显示出来,让你可以继续购物。

Cookie的数据存储在客户端的浏览器中,不会占用服务器的资源

在浏览器的控制台中,可以直接输入:document.Cookie来查看Cookie。Cookie是一个由键值对构成的字符串,出于安全考虑

httponly类型的获取不到的,不要找半天httponly发现找不到

又多一个名词,再探索一下?

httponly又是什么啊?

HttpOnly就是一个设置在HTTP响应头中的标志,它可以防止某些类型的客户端脚本(如JavaScript)访问cookie。当服务器向客户端发送带有HttpOnly标志的cookie时,客户端的JavaScript代码将无法通过document.cookie访问该cookie,这可以有效地提高Web应用程序的安全性。

如果给某个 cookie 设置了 httponly 属性,则无法通过 JS 脚本读取到该 cookie 的信息,但还是能通过Application 中手动修改 cookie, 所以只是在一定程度上可以防止 XSS 攻击,但也不是绝对的安全

  • Cookie主要用于跟踪用户的偏好和行为,以便提供个性化的体验。例如,在网站上保存用户的登录状态、购物车信息等。

    啊,平时刷视频、逛tb、个性化广告等等的信息居然就是这样被页面记录、推送的

还有一个大家都在讨论(众说纷纭)的话题就是-我们平时的浏览记录等信息会被记录吗?

  • 答案是不确定(不保证一定不被记录,不保证一定被记录)

    Cookie本身是存储在客户端的,而不是服务器端,所以服务器不需要把

    Cookie记录保存到数据库中

    但至于记录个人的爱好、浏览记录等信息是否被记录到数据库,如何被记录到数据库,这取决于具体的软件、网站、隐私政策和数据收集方式..

Session

Session就像是你的个人档案,它的主要作用是保存用户的状态和权限。比如说,你在网站上登录之后,服务器就会为你创建一个Session,里面保存了你的登录状态和购物车信息等等。这样,当你在浏览网站的时候,服务器就会根据Session来提供个性化的体验,比如显示你的购物车里有什么,或者显示你最近浏览过的商品。

也可以理解为是一个比较特殊的map ,除了可以像其它map一样存取数据,它还有过期时间、唯一的id区分不同session,

创建该session时,会同时创建一个Cookie,Cookie的keyJSESSIONID,而Cookie的value是该session的id。

又遇到不懂的了吗?Cookie的key是啥东西?

JSESSIONID是一种用于在客户端和服务器端之间传递会话信息的Cookie名称。当用户在浏览器中访问一个需要登录的网站时,服务器会

在后台创建一个会话,并生成一个唯一的Session ID,将其存储在服务器端的Session中,同时,服务器会将Session ID通过Cookie的方式发送给客户端,通常使用的Cookie名称就是JSESSIONID

  • Session的数据信息存放在服务器上,Session的数据只能被服务器访问,因此相对来说比较安全,但是需要占用服务器的资源,

  • Session主要用于跟踪用户的状态和权限,以便提供个性化的体验。例如,你搜索的内容、在网站上保存用户的登录状态、购物车信息等。

  • 对于Session并没有上限,但出于对服务器端的性能考虑,Session内不要存放过多的东西

Token

Token就像是你的身份证,它的主要作用是用于身份验证和授权。比如说,你在使用某个APP的时候,需要登录才能使用一些功能,这时候APP就会颁发给你一个Token(令牌),你需要在每个请求中携带这个Token,服务器会通过验证Token来确定你的身份和权限,以确保你只能访问你有权访问的内容。

比如用户已经登录了系统, 我给他发一个token, 里边包含了这个用户的 user id, 下一次这个用户再次通过Http 请求访问我的时候, 把这个token 通过Http header 带过来就可以了。

但是这时候感觉和session没区别啊,万一有人伪造做假攻击呢?于是就用算法对数据做了签名,用签名+数据 = token ,签名不知道,也就无法伪造token了

这个token 不保存, 当用户把这个token 给我发过来的时候,我再用同样的算法和同样的密钥,对数据再计算一次签名, 和token 中的签名做个比较, 如果相同, 我就知道用户已经登录过了,并且可以直接取到用户的user id , 如果不相同, 数据部分肯定被人篡改过, 就知道这个人是冒充货,返给它没有认证的信息

Token是一种无状态的身份验证机制,意味着服务器不需要保存Token的状态(这不是大大的减轻了服务器的压力~),前后端分离架构中前端无法直接访问后端的Session。但是,前后端分离架构中依然可以使用Session来存储应用程序的其他状态信息,例如购物车数据等,只是不能用来保存用户的登录状态。

  • 既可以保存在服务器也可以在客户端

  • Token是一种无状态的身份验证机制,它可以在多个服务器之间共享,而Session则需要在每个服务器上都保存一份。使用Token可以避免Session共享和Session过期等问题,同时也可以降低服务器的负担。

  • Token 中的数据是明文保存的, 还是可以被别人看到的, 所以我不能在其中保存像密码这样的敏感信息

  • 基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。

  • 大多数使用Web API的互联网公司中,它是Tokens多用户下处理认证的最佳方式

  • 被攻击是不是很烦恼! Token通常用于API身份验证等场景,可以有效避免跨站请求伪造(CSRF)等攻击~

拓展一下Token的身份验证过程

  • 用户在客户端进行登录操作,将用户名和密码发送到服务器端。

  • 服务器端通过验证用户名和密码的正确性,生成一个Token,并将Token返回给客户端。

  • 客户端将Token保存在本地,例如在浏览器的Cookie或localStorage中。

  • 客户端在后续的请求中,将Token发送给服务器端进行身份验证。

  • 服务器端接收到请求后,从请求中获取Token,并对Token进行解密和验证。

  • 如果Token验证通过,服务器端将响应请求并返回所需的数据,否则返回身份验证失败的错误信息。

在身份验证过程中,服务器端通常会对Token进行解密、验证签名、检查Token是否过期等操作,以确保Token的有效性和安全性

栩栩如生、通俗易懂~ 重点讲完了!

简单记一些知识

看完了没,啥也没懂?好吧,无奈,简单记一下区别吧,面试时候不能哑口无言吧

  • Session和Token是在服务器端保存数据的机制,而Cookie是在客户端保存数据的机制

    通常情况单个Cookie保存的数据在4KB以内(面试官:这都知道,给你offer!欣喜若狂的自己:太好了!)

  • Session和Token通常用于身份验证和状态管理,而Cookie通常用于跟踪用户的偏好和行为

  • Session和Token通常用于敏感数据的存储和传输,而Cookie通常用于非敏感数据的存储和传输。

  • Session和Token需要服务器端进行管理和维护,而Cookie可以由客户端自行管理和维护。

  • Token可以跨域使用,而Session通常只能在同一个域名下使用;Token可以在分布式系统中使用,而Session通常只能在单一服务器上使用。

(可以忽略)写着写着又想要拓展了,哈哈哈,想要探索的伙伴们,一定想要知道单个站点可以存储的Cookie数量,

这里有疑惑?

国际互联网标准是每个网站可以存储的 Cookie 数量不得超过 300 个,具体还是根据不同的浏览器来定,

发现部分博主说单个站点最多保存20个Cookie,这是不合理的,也有近100点赞

网上一连串的信息是复制的,有时我们不能轻易的相信,要学会自己去探索,去验证!不然就误人耳目了

这里是仅仅是为了说明下Cookie的数量,帮助更多伙伴学会探索知识,对原博主没有任何恶意哈

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

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

相关文章

Linux中创建sftp用户并限制目录权限

注意两点&#xff1a; 一是禁止该用户通过ssh登录&#xff0c;二是不需要创建家目录。家目录简单来说&#xff0c;就是在/home下的用户命令&#xff0c;默认每个用户在/home中都是有与用户名一样的文件夹。 1.创建组 groupadd sftp 2. 创建用户 useradd -g sftp -s /sbin/…

Vue3 JSX 插槽、v-model 的用法以及 React JSX 的区别

前言 写这篇文章的初衷是&#xff0c;Vue3 JSX 部分与 React JSX 容易混淆&#xff0c;比如如本文所说的 slot & v-model&#xff0c; 如果你是第一次接触 JSX&#xff0c;可先阅读前面写过的 React & JSX 日常用法与基本原则 来对 JSX 有一个整体的认知以及比较两者间…

如何了解(海外抖音TiKToK)与国内抖音的区别以及介绍

一、海外抖音TK平台的优势 自从抖音在中国大受欢迎后&#xff0c;海外也推出了海外版抖音TK平台。尽管两者都是视频分享平台&#xff0c;但它们在一些方面具有明显的区别和独特的优势。下面将详细介绍海外抖音TK平台的优势以及与国内抖音的区别性。 优势&#xff1a; 1. 多元…

9-2 小波滤波器、去噪、增强、变换(matlab程序)

1.简述 小波去噪滤波算法是一种基于小波变换的滤波方法&#xff0c;它通过对信号进行小波变换来分解信号的频率分量&#xff0c;并根据信号的特点选择合适的阈值处理方法来去除噪声。该算法的主要思想是将信号分解成多个频率分量&#xff0c;根据信号的特点选择合适的阈值处理…

【IMX6ULL驱动开发学习】13.Pinctrl子系统与GPIO子系统

上一篇博客中&#xff0c;已经实现了设备树的添加 【IMX6ULL驱动开发学习】12.Linux驱动之设备树 这篇博客介绍Pinctrl子系统与GPIO子系统的使用 Pinctrl子系统参考文档&#xff1a; 内核文档链接&#xff1a;https://www.kernel.org/doc/Documentation/ 内核源码doc&#xff…

AD23 原理图选中元件在PCB中高亮显示

概述 项目需要&#xff0c;再次使用AD&#xff0c;在此做个笔录。 1、原理图界面 2、在原理图界面选中电容后&#xff0c;对应的PCB界面该电容高亮显示 3、总结 希望能帮助到有需要的攻城狮。

Linux查看日志常用操作整理

项目出现异常&#xff0c;要定位问题&#xff0c;查看日志是最常用的方法&#xff0c;在Linux系统查看一些日志文件&#xff0c;我们一般会使用tail、cat等命令&#xff0c;下面总结归纳一下这些常用的命令。 1、查看日志的方法 tail&#xff1a;tail命令应该是使用最多的&am…

探讨绿色照明与智能照明节能控制系统应用

张心志 安科瑞电气股份有限公司 上海嘉定 201801 【摘 要】随着社会经济的不断发展&#xff0c;人们对生活质量、环境品质越发重视。积极推广绿色智能照明&#xff0c;提高城市照明质量&#xff0c;对于改善人们居住环境意义重大。文章简要介绍了绿色照 明的基本要求、室内智…

互联网编程之简单邮箱发送程序

需求是使用Java写一个简单的邮箱发送程序。 注意需要到QQ邮箱的设置-账户中开启服务。 package org.example;import org.apache.commons.mail.Email; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.SimpleEmail;public class Main {public …

ospf-interface-fsm-and-neighbor-fsm

/* Interface State Machine */ struct {int (*func) (struct ospf_interface *);int next_state; } ISM [OSPF_ISM_STATE_MAX][OSPF_ISM_EVEN

网络安全技术入门(1):简介

文章目录 1.前言2.什么是网络安全技术&#xff1f;3.列举一些常见的网络安全技术3.1 防火墙3.2 加密技术3.3 身份认证和访问控制3.4 恶意软件防护3.5 网络监控和日志管理3.6 威胁情报和漏洞管理3.7 安全培训和意识教育 4.网络安全研究的关键技术5.网络安全防护技术有哪些&#…

计算机网络 - 应用层http协议 - http报文格式介绍(1)

前言 本篇认识和理解应用层中的http协议&#xff0c;了解抓包工具并进行使用&#xff0c;认识请求报文与响应报文&#xff0c;了解报文中基本键值对意思例如&#xff1a;Set-Cookie, 状态码等&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#…

segement and remove-SAM一键清除物体(代码安装实战项目)

结果展示 去除图片中前景物体的步骤: 1.框选 2.分割 3.分离 4.去除 项目介绍 一键帮你剔除视频内的物体,现在只需要一句话。使用Meta的SAM技术,你现在可以让视频内任意物体消失! 特点 按照提示进行分割:只需输入“黑色狗”,您就可以将您的黑色狗分割出来; 修复图…

JAVA 初识序列化与反序列化

JAVA 初识序列化与反序列化 目录 JAVA 初识序列化与反序列化初识序列化与反序列化1 概述2 特点/应用场景3 涉及到的流对象4 代码实现序列化与反序列化4.1 步骤1&#xff1a;创建学生类Student4.2 步骤2&#xff1a;创建序列化测试类 5 测试报错NotSerializableException:6 测试…

yarn与npm的区别(yarn的安装报错问题)

一、yarn 是什么&#xff0c;yarn 与 npm 的区别是什么&#xff1f; yarn 是一个软件包管理系统&#xff0c;Yarn 和 npm 都是包管理工具&#xff0c;用于管理用 JavaScript 编写的软件包&#xff0c;yarn的出现是为了弥补 npm的一些缺陷。yarn 与 npm 的区别 &#xff1a; 性能…

Matplotlib---3D图

1. 3D图 # 3D引擎 from mpl_toolkits.mplot3d.axes3d import Axes3D fig plt.figure(figsize(8, 5)) x np.linspace(0, 100, 400) y np.sin(x) z np.cos(x)# 三维折线图 axes Axes3D(fig, auto_add_to_figureFalse) fig.add_axes(axes) axes.plot(x,y,z) plt.savefi…

arduino uno r3 机械臂

1、硬件 arduino uno r3 改进板、sg90舵机&#xff08;180度 x 4&#xff09;、JoyStick Shield PS2游戏摇杆扩展板&#xff08;或者按键 遥杆模块&#xff09;、3D打印件、M3螺丝螺母&#xff08;10mm 15mm 25mm &#xff09;以及M2螺丝螺母。 2、接线 开发版使用DC口7V-12V 供…

AI 绘画风格迁移之青铜模型训练

前情提要 2023-07-01 周六 杭州 阴 小记: mmp&#xff0c;上周吃烤面筋&#xff0c;不小心牙签扎到口腔&#xff0c;结果这几天吃什么都不舒服&#xff0c;可是计划还是要做的&#xff0c;下半年要把当下 AI 的应用梳理下&#xff0c;自己还是喜欢那种先使用再学习相关原理&a…

C语言之数组初阶(1-4)

目录 1. 一维数组的创建和初始化 2. 一维数组的使用 3. 一维数组在内存中的存储 4. 二维数组的创建和初始化 5. 二维数组的使用 6. 二维数组在内存中的存储 7. 数组越界 8. 数组作为函数参数 数组概念:数组是一组相同类型元素的集合 1.一维数组的创建和初始化 在C语言中…

【已解决】nacos新增配置报错: 发布失败。请检查参数是否正确

解决方法&#xff1a; sql文件直接采取容器默认自带的创建表&#xff0c;复制出来即可 非容器自带sql&#xff0c;有多余encrypted_data_key字段 1.删掉config_info 和 his_config_info 表中的encrypted_data_key字段 2.config_info 和 his_config_info 表中非空encrypted_data…