Cookie和Session的区别与联系

2023-10-30

1、前言:http的无状态和无连接

无连接:限制每次连接只处理一个请求,服务端处理完客户端的请求,并收到客户端的响应后,就断开连接

无状态:没有记录用户的登录状态,在淘宝上点击添加购物车、点击收藏、点击我的订单每一步就必须得重新登录,非常麻烦

2、解决方法:

1)在用户端添加一个cookie,标记访问者的身份

2)在服务器增加一个缓存区能同时解决数据缓存问题

(1)缓存区作为一个数据缓冲,就不用一次次地访问数据库,浪费大量计算机资源,而是在最后统一归入数据库

(2)缓存区,你就不用把临时的数据放到数据库中了,只需交流告一段落之后,再把数据整理,把有用的数据归入数据库

(3)缓冲区就是session机制:给访问者分配一个sessionID代替用户名和密码,给每个session一个ID,一方面用来方便自己查询,另一方面把这个ID给用户,用户下一次访问的时候就可以不用用户名和密码,而是直接使用这个ID来表明自己的身份。使用sessionID有哪些好处,方便直接根据ID查询用户对应的session,加密的时候计算量小,安全性不会降低,甚至还更高一些。sessionID本身会使用一些加密算法。

3、Cookie与Session

Cookie是什么?

服务端发送给客户端浏览器的一个小数据,浏览器在下次发送请求到服务端的时候会携带,告诉服务器两次请求是否来自同一个浏览器

Cookie 主要用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

Session是什么?

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

登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。

session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session

4、Cookie 和 Session 有什么不同?

  • 作用范围不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端。
  • 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等。
  • 有效期不同,Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效。
  • 隐私策略不同,Cookie 存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 Cookie 中导致信息被窃取;Session 存储在服务端,安全性相对 Cookie 要好一些。
  • 存储大小不同, 单个 Cookie 保存的数据不能超过 4K,有的浏览器限制一个站点最多保存20个cookie,Session 可存储数据远高于 Cookie。

5、cookie与session的关系

用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建创建对应的 Session ,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名。

当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作

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

6、Token

既然服务端是根据 Cookie 中的信息判断用户是否登录,那么如果浏览器中禁止了 Cookie,如何保障整个机制的正常运转。

第一种方案,每次请求中都携带一个 SessionID 的参数,也可以 Post 的方式提交,也可以在请求的地址后面拼接 xxx?SessionID=123456...。

第二种方案,Token 机制。Token 机制多用于 App 客户端和服务器交互的模式,也可以用于 Web 端做用户状态管理。

Token 的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。Token 机制和 Cookie 和 Session 的使用机制比较类似。

当用户第一次登录后,服务器根据提交的用户信息生成一个 Token,响应时将 Token 返回给客户端,以后客户端只需带上这个 Token 前来请求数据即可,无需再次登录验证.

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cookie和Session的区别与联系 的相关文章

  • 任何无需 GUI/X 会话即可使用 GreaseMonkey 脚本运行 Firefox 的方法

    我需要为第三方网站构建一个小型 监控 抓取工具 这是一个外部网站 其中包含有关我们访问者的统计信息 不幸的是 这个网站很难通过正常的 wget 机制 因为它使用了大量复杂的 JS 其中一部分是由 GWT 生成的 所以我的解决方法是创建一个
  • 如何从WebBrowser控件获取图像

    我有一个 WebBrowser 控件 在浏览页面后我需要下载图像 我使用了以下代码 HtmlElementCollection tagsColl webBrowser1 Document GetElementsByTagName img f
  • 为什么会话 cookie 在从域提供服务时有效,但在使用 IP 时却无效?

    我有一个 Flask 应用程序 其中的会话在我的本地开发计算机上运行良好 但是 当我尝试将其部署在亚马逊服务器上时 会话似乎不起作用 更具体地说 未设置会话cookie 不过 我可以设置普通的 cookie 我确保我有一个静态安全密钥 正如
  • 创建会话[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要在 php 中创建会话的帮助 我需要一个登录会话 然后如果用户想更改他们的用户名 他们可以但是 我知道如何更改用户名 但使用会话时情
  • 使用 Django 会话存储登录用户

    我正在创建一个以 REST 为中心的应用程序 它将针对大多数特定于域的模型使用某种 NoSQL 数据存储 对于我打算围绕 REST 数据框架构建的主站点 我仍然希望对用户 计费信息和域数据模型范围之外的其他元数据使用传统的关系数据库 有人告
  • 如何使用 Spring Security 和 Spring Session 从多个服务器获取相同的会话

    很抱歉我的英语还是不太好 请耐心等待 希望您能理解我的问题 我有两个网络服务器 每个网络应用程序都是相同的 Web 服务器共享一台 Redis 服务器 我使用 Spring Security 和 Spring Session 当我登录第一台
  • 如何让用户会话持续24小时?

    我搞乱了我的 apache 和 php ini 文件 我的网站的用户仍然抱怨网站在很短的时间后或每次关闭并打开同一个浏览器时都会将他们注销 我正在运行 Apache 和 PHP 我应该进行哪些设置才能使用户会话持续 24 小时 这样他们就不
  • 分布式张量流中的并行进程

    我有带有训练参数的张量流神经网络 它是代理的 策略 网络正在核心程序的主张量流会话的训练循环中进行更新 在每个训练周期结束时 我需要将该网络传递给几个并行进程 工作人员 这些进程将使用它来从代理策略与环境的交互中收集样本 我需要并行执行 因
  • 无法加载请求的类:会话

    我的配置文件看起来像这样 gt config sess cookie name ci session config sess expiration 7200 config sess expire on close TRUE config s
  • 为什么呼叫会话不起作用? (代码点火器 3)

    我的配置是这样的 config sess driver database select database driver config sess save path ci sessions name of the mysql table co
  • 是否保证 HttpSessionListener.sessionCreated() 在任何其他线程访问新会话之前完成?

    我正在尝试将值缓存在ConcurrentHashMap in the Session 为了避免竞争条件并确保在任何线程尝试使用我的地图之前创建它 我使用HttpSessionListener sessionCreated 将地图添加到Ses
  • Laravel,2 个域中的 2 个项目同一会话

    我正在 2 个不同的域 domain1 tld 和域 2 tld 中创建 2 个项目 domain1 tld 是主要事件生成器页面 domain2 tld 是其事件之一 我想共享相同的会话 它们实际上共享相同的数据库和相同的 apache
  • 使用 CDI+JSF 使会话失效不起作用

    我正在尝试在我的应用程序中实现注销 所以我这样做了 public String logout try FacesContext facesContext FacesContext getCurrentInstance ExternalCon
  • 使用 ASP.NET 2.0 处理过期会话的最有效方法是什么

    在我们正在建设的网站上 当用户的会话结束时 我们需要能够将用户重定向到默认页面 乍一看 我们使用 Session End 和 Response Redirect 来完成这项工作 Sub Session End ByVal sender As
  • PHP session.cookie_secure:设置为 true 时禁用会话

    当我设置以下配置时 ini set session cookie secure 1 我的整个应用程序的会话被禁用 我无法再写入或读取会话变量 sessionName us session name sessionName ini set s
  • 非法尝试将集合与两个开放会话关联 流畅的 nhibernate

    我有这个异常 非法尝试将集合与两个打开的会话关联 每次我保存包含子集合的实体时都会引发该异常 我用谷歌搜索一下 我发现在调用保存时我打开了两个或多个会话 但我确定我只使用了一个会话 我哪里做错了 我该如何解决这个问题 注意 我使用的是 MV
  • 如何使用express在node.js中使浏览器关闭后会话过期?

    我在用 req session cookie maxAge 14 24 3600 1000 0 让会话在两周后过期 但现在我想让它在浏览器关闭后过期 有什么办法可以做到吗 来自连接会话中间件文档 https github com expre
  • ASP.NET Core 会话超时

    我记得我们在 ASP NET 中使用了 session timeout 来更改会话超时 如果不更改 则为 20 分钟 我尝试在 Startup cs 中更改 ASP NET Core 3 1 中的会话超时 但没有任何反应 我对操作员使用身份
  • 连接多个用户的 R 闪亮会话

    最小可重现示例 library shiny ui lt fluidPage actionButton button1 Run 1 actionButton button2 Run 2 server lt function session i
  • REST - 复杂的应用程序

    我正在努力将 RESTful 原则应用到我正在开发的新 Web 应用程序中 特别是 为了实现 RESTful 每个 HTTP 请求本身都应该携带足够的信息 以便其接收者对其进行处理 从而与 HTTP 的无状态性质完全一致 该应用程序允许用户

随机推荐

  • SpringBoot之【mybatisplus】分页插件、条件查询、sql打印开启

    文章目录 一 概述 二 流程 1 sql打印开启 2 分页插件 3 常用条件 一 概述 本篇主要写开启 sql的打印 分页插件开启 条件查询 二 流程 1 sql打印开启 yml文件添加如下配置 mybatis plus 配置slq打印日志
  • ForeFront Chat 免费版GPT-4来了!

    Forefront Chat简介 近日 Forefront AI 正式推出 Forefront Chat 允许用户免费体验GPT 4 的强大功能 Forefront AI 在 Twitter 上表示 今天 我们发布了 Forefront C
  • 为什么析构函数必须是虚函数?为什么默认的析构函数不是虚函数?

    本博客可能随时删除或隐藏 请关注微信公众号 获取永久内容 微信搜索 编程笔记本 获取更多信息 codingbook2020 今天我们来谈一谈面试 C 工程师时经常被谈到的一个问题 为什么析构函数必须是虚函数 为什么默认的析构函数不是虚函数
  • java高频面试题(2023最新)

    目录 一 java基础 1 八大基础类型 2 java三大特性 3 重载和重写的区别 4 pubilc protected dafault 不写 private修饰符的作用范围 5 和equals的区别 6 hashcode 值相同 equ
  • 如何解决“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?

    今天在用uniapp框架写小程序 遇到报错 错误原因 微信开发者工具从 1 05 2201210 版本开始 对小程序项目新增了无依赖文件过滤能力 如果某个 js 文件被静态分析显示是无依赖文件 在实际运行时又被其他 js 文件 requir
  • java 文件读取和写入

    1 文件名 1 InputStream 字节流 和Reader 字符流 2 OutputStream 字节流 和 Writer 字符流 1 文件名 Java提供了File类 来表示一个文件 通过构造方法来指定路径 绝对路径 目录与目录之间用
  • BUCK电路-TL494方案 持续更新大概2周更新完成

    目录 一 电磁感应现象 这个现象是如何产生的 磁生电的变换的条件 二 电感的伏安特性 计算磁场大小可以用上面这个公式 磁感应强度B来表示 u0是真空磁导率 N是线圈的匝数 I是通过这个线圈的的电流大小 电生磁的过程就是由I来生成这个B 可以
  • SpringBoot 整合 ChatGPT API 项目实战,挣了3K!

    大家好 我是老赵 体验到了ChatGPT的强大之后 那么我们会想 如果我们想基于ChatGPT开发一个自己的聊天机器人 这个能搞定吗 ChatGPT平台已经为技术提供了一个入口了 很简单的就是实现了 一 准备工作 1 已成功注册 OpenA
  • Jmeter多接口测试之参数传递

    接口测试包含单接口测试和多接口测试 通过组合多个接口实现一组功能的验证称为多接口测试 单接口重在单个接口多种请求组合的响应断言 多接口重在组合不同接口 实现流程的串联和验证 多接口测试涉及到接口之间参数的传递 比如AB两个接口协同完成一个功
  • DDOS高防ip是什么?有什么用?

    ddos高防ip是网络安全公司针对服务器在遭受大流量的ddos攻击导致服务不可用的情况 推出的付费增值服务 ddos攻击是通过用大量的无效流量数据对该IP的服务器进行请求 导致服务器的资源被大量占用 无法对正确的请求作出响应通过配置ddos
  • shell变量的设定规则

    内容摘自鸟哥的Linux 私房菜 1 变量与变量内容以一个等号 来连结 如下所示 myname VBird 2 等号两边不能直接接空格符 如下所示为错误 myname VBird 或 myname VBird Tsai 3 变量名称只能是英
  • Django基础之Admin后台数据管理

    Admin后台数据管理 一个站点或者网站 除了给用户浏览及操作外 还需要对后台数据进行管理 比如添加商品 修改商品等等 Django提供了一个可插拔的后台管理系统 Admin 应用 该系统可以从模型中读取元数据 并提供以模型为中心的界面 A
  • C语言文件通讯录制作说明

    文件通讯 前言 很多计算机专业大学生第一个课设就是校园出入管理系统或者文件版通讯录 这些软件工程不仅可以锻炼我们的编程能力 也可以让我们更为深刻的理解C语言知识 为将来的学习打下基础 但是同学们肯定会有所疑问 下面是我的一个范例 提示 以下
  • 高德地图 – 1.问题集锦

    1 自动加载文本框的坐标 并在地图标注点 2 点击地图时 并且 逆地理编码 解析出地址方在文本框 js var lnglatXY var marker 初始化地图对象 加载地图 var map new AMap Map mapContain
  • 【PB】动态添加数据窗口列中下拉列表的内容

    1 设置数据窗口某个列 dept id 的style type为DropDownListBox dw 1 Modify dept id ddlb case any 2 为下拉列表框添加数据 boolean lb flag false str
  • 剖析C++标准库智能指针(std::auto_ptr)

    1 Do you Smart Pointer Smart Pointer 中文名 智能指针 舶来品 不可否认 资源泄露 resource leak 曾经是C 程序的一大噩梦 垃圾回收 机制 Garbage Collection 一时颇受注目
  • 测开笔记九:线程&TestNG

    1 线程 1 1 线程概念 线程 程序执行流的最小执行单位 是行程中的实际运作单位 经常容易和进程这个概念混淆 那么 线程和进程究竟有什么区别呢 首先 进程是一个动态的过程 是一个活动的实体 简单来说 一个应用程序的运行就可以被看做是一个进
  • 机器学习——核函数

    问 已知三维空间中的两个样本点分别为 2 4 5 和 1 2 3 定义核函数表达式为 试计算这两个样本点映射到十维空间后的 答 首先计算两个样本点的平方内积 2 1 4 2 5 3 25 然后代入核函数表达式 25 5 6 131 1 核函
  • 如何修改element.style的样式

    我们通常在用组件库或者调试web样式时 发现有 element style这样的类名 这种样式其实是行内样式导致的 但是像element这种框架 没法修改行内样式
  • Cookie和Session的区别与联系

    1 前言 http的无状态和无连接 无连接 限制每次连接只处理一个请求 服务端处理完客户端的请求 并收到客户端的响应后 就断开连接 无状态 没有记录用户的登录状态 在淘宝上点击添加购物车 点击收藏 点击我的订单每一步就必须得重新登录 非常麻