【Linux】HTTP cookie与session

news2025/4/6 13:34:20

在登录B站时,有登录和未登录两种状态,

  • 问题:B站是如何认识我这个登录用户的?
  • 问题:HTTP是无状态、无连接的,怎么能够记住我?

HTTP协议是无状态、无连接的。比如客户端(浏览器)在访问a.html时,服务器就会对客户端进行响应,响应正文部分会带上a.html的内容给浏览器客户端。由于HTTP是无状态的,当客户端浏览器再次发起请求时,即便请求的是服务器上的某一种同一份资源(历史上请求过的),然而服务器并不清楚曾经同一个客户端历史上请求过同一个资源,只能把这个资源再返回给客户端,这种特性称为无状态。也就是说,客户端发起多少次请求,服务器就要把对应的资源在网络中进行多少次传输。所谓无连接,就是HTTP协议通信本身不需要连接(和tcp面向连接无关,是两个维度的概念)。

但是这样的特性会面临很多问题,比如有一个视频网站,有的视频才能让普通用户浏览(甚至没有登录);有的视频必须用户登录之后,才能观看完整视频;当然还有的视频,必须是会员登录,才能观看。我们在观看视频时,一会儿看这种,一会看那种,但是这个网站要根据不同的用户身份(没有登录的、登录的、会员),对不同的视频内容做不同的决策,所以网站要识别用户身份。在观看完未登录就能看的视频后,又打开了登录才能看的视频,那服务器怎么知道我历史上曾经登录过呢?HTTP本身是无状态的,怎么能够识别出来我的身份呢?此时就需要使用cookie和session技术!这项技术的用途之一就是来协助网站在基于HTTP协议的基础之上帮助网站标识一个用户对应的身份,也可以称之为登录会话管理。另外一个例子,我们在平常都会遇到过,在第一次登录某个网站需要输入账号密码,后面很长时间再次登录就无需输入账号密码即可,这也是这种技术的体现。

HTTP Cookie

定义

HTTP Cookie是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器未来向同一台服务器再次发起请求时被携带并发送到服务器上。这用于告知服务器两个请求是否来自同一浏览器。

工作原理

  • 当用户第一次访问网站时,服务器会在响应的HTTP头中设置Set-Cookie字段,用户发送Cookie到用户的浏览器。
  • 浏览器在接收到Cookie后,会将其保存在本地(按照域名进行保存)
  • 在之后的请求中,浏览器会自动在HTTP请求头中携带Cookie字段,将之前保存的Cookie信息发送给服务器。

在浏览器第一次登录网站时,会把账号密码通过http登录发给服务器,而服务器会认证这个用户,在应答时,使用Set-Cookie:用户基本信息(用户名密码)(这是一个报头属性),而浏览器会识别到Set-Cookie,发现服务器要求我在浏览器内部把设置的用户基本信息记录在浏览器内部,所以浏览器就要赶紧把服务器给我写回来的用户的基本信息保存起来。从此往后,浏览器再次访问这个网站时,会给所有的http请求报头中自动带上用户基本信息,这样服务器在每次被这个浏览器请求时,都会拿到用户在第一次登录时输入的账号密码,进而对用户身份进行合法化鉴定。

分类

在浏览器保存用户基本信息时,有两种方案:

  • 内存级,会话Cookie:保存在内存中,关闭浏览器,这块内存就被释放。
  • 文件级,持久Cookie:在浏览器的安装路径,以某种方式保存在文件中,即使浏览器关掉,Cookie还在。带有明确的过期时间或持续时间。
  • 如果Cookie是一个持久性的cookie,那么它是与浏览器相关的,是特定目录下的一个文件。但直接查看这些文件可能看到乱码或无法读取的内容,因为Cookie文件通常以二进制或sqlite格式存储。一般可以在浏览器对应的选项查看即可。

认识Cookie

基本格式

关于其它可选属性的解释

  • expires=<date>:设置Cookie的过期时间/日期。如果未指定此属性,则Cookie默认会话为Cookie,即当浏览器关闭时到期。
  • path=<some_path>:限制Cookie发送到服务器的哪些路径。也就是在访问指定路径时才会提交Cookie。如果path=/,表示访问当前网站所有路径都会提交Cookie。
  • domain=<domain_name>:指定哪些主机可以接受Cookie。默认为设置它的指针。
  • secure:仅当使用HTTPS协议时才发送Cookie。这有助于防止Cookie在不安全的HTTP连接中截获。
  • HttpOnly:标记Cookie为HttpOnly,意味着该Cookie不能被客户端脚本访问。

其中,username、expires、path是最重要的属性。

单独使用Cookie的问题

我们写入的Cookie数据如果是用户的私密数据,比如用户名密码、浏览痕迹,本质问题在于这些用户私密数据在浏览器(用户端)保存,非常容易被人盗取,除了被盗取,还有就是用户私密数据也就泄漏了。

为了解决这样的问题,引入了HTTP Session。

HTTP Session

定义

HTTP Session是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于HTTP协议是无状态的,因此服务器需要通过Session来记住用户的信息。

工作原理

  • 当用户首次访问网站时,服务器会为用户创建一个唯一的Session ID,并通过Cookie将其发送到客户端。
  • 客户端在之后的请求中会携带这个Session ID,服务器通过Session ID来识别用户,从而获取用户的会话信息。
  • 服务器通常会将Session信息存储在内存、数据库或缓存中。

实际会话保持的做法是Cookie+Session!

安全性

Session是相对安全的!与Cookie相似,由于Session ID是在客户端与服务器之间传递的,因此也存在被窃取的风险。

之前的Cookie存在两个问题:

1.身份被冒认:为了解决这个问题,session是服务器创建并管理的,一旦查到Session ID有问题,让这个Session ID失效就可以了。那怎么知道这个client的Session ID是一个非法的呢?这就需要和业务结合才可以。

2.私密信息被泄露:虽然Cookie被盗取了,但是用户只泄漏了一个Session ID,私密信息暂时没有被泄露的风险。

超时和失效

Session可以设置超时时间,当超过这个时间后,Session会自动失效。

用途

  • 用户认证和会话管理
  • 存储用户的临时数据(如购物车内容)

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

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

相关文章

Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析

文章目录 Pre官网集成步骤POM依赖使用第一步&#xff1a;编写 Logback 的配置文件第二步&#xff1a;在代码中使用 SLF4J 原理分析1. 获取对应的 ILoggerFactory2. 根据 ILoggerFactory 获取 Logger 实例3. 日志记录过程 小结 Pre Java - 日志体系_Apache Commons Logging&…

5.系统学习-PyTorch与多层感知机

PyTorch与多层感知机 前言PyTroch 简介张量&#xff08;Tensor&#xff09;张量创建张量的类型数据类型和 dtype 对应表张量的维度变换&#xff1a;张量的常用操作矩阵或张量计算 Dataset and DataLoaderPyTorch下逻辑回归与反向传播数据表格 DNN&#xff08;全连结网络&#x…

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中&#xff0c;您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的&#xff0c;这意味着在系统重启后这些配置会丢失。为了将这些配置持久化&#xff0c;您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由&#xff0c;您可以将这些配…

Unity Shader TexelSize的意义

TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别

引言&#xff1a;在现代嵌入式硬件设计中&#xff0c;开关元件作为电路中的重要组成部分&#xff0c;起着至关重要的作用。三种主要的开关元件——IGBT&#xff08;绝缘栅双极型晶体管&#xff09;、MOSFET&#xff08;金属氧化物半导体场效应晶体管&#xff09;和三极管&#…

【亲测有效】k8s分布式集群安装部署

1.实验环境准备 准备三台centos7虚拟机&#xff0c;用来部署k8s集群&#xff1a; master&#xff08;hadoop1&#xff0c;192.168.229.111&#xff09;配置&#xff1a; 操作系统&#xff1a;centos7.3以及更高版本都可以配置&#xff1a;4核cpu&#xff0c;4G内存&#xff…

【SQL server】教材数据库(5)

使用教材数据库&#xff08;1&#xff09;中的数据表完成以下题目&#xff1a; 1 根据上面基本表的信息定义视图显示每个学生姓名、应缴书费 2 观察基本表数据变化时&#xff0c;视图中数据的变化。 3利用视图&#xff0c;查询交费最高的学生。 1、create view 学生应缴费视…

去除el-tabs 下面的灰色横线,并修改每一项的左右间距,和字体颜色

HTML <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane label"全部" :name"null"></el-tab-pane><el-tab-pane label"问答陪练" name"general-t…

纯血鸿蒙ArkUI的网格布局详解

网格布局概要 网格布局是由行和列分割的单元格组成&#xff0c;通过指定项目所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力&#xff0c;子组件占比控制能力&#xff0c;是一种重要的自适应布局组件&#xff0c;其使用场景有九宫格图片展示、日历、计算器等…

LeRobot(1)

Train python lerobot/scripts/train.py \ policyact \ envaloha \ env.taskAlohaInsertion-v0 \ dataset_repo_idlerobot/aloha_sim_insertion_human \ load_data一直报错&#xff0c;忘记截图了&#xff0c;反正是ssh报错&#xff0c;下不下来&#xff0c;网…

【C++】B2085 第 n 小的质数

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目内容输入格式输出格式题目示例 &#x1f4af;原始做法分析解法源码解析1. 步骤分析2. 问题分析3. 性能问题 &#x1f4af;老师提供的优化解法优化代码每部分解…

Node.js详细安装教程

1.下载 [名称]&#xff1a;Node.js [大小]&#xff1a;26.4 MB [语言]&#xff1a;简体中文 [安装环境]&#xff1a;Win7/Win8/Win10 [Node.js15.11.0下载链接]&#xff1a; 通过网盘分享的文件&#xff1a;Node.js 链接: https://pan.baidu.com/s/12WlNlWlX-1ppdhz…

IDEA 搭建 SpringBoot 项目之配置 Maven

目录 1?配置 Maven 1.1?打开 settings.xml 文件1.2?配置本地仓库路径1.3?配置中央仓库路径1.4?配置 JDK 版本1.5?重新下载项目依赖 2?配置 idea 2.1?在启动页打开设置2.2?配置 Java Compiler2.3?配置 File Encodings2.4?配置 Maven2.5?配置 Auto Import2.6?配置 C…

SpringCloud 系列教程:微服务的未来(三)IService接口的业务实现

本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作&#xff0c;帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询&#xff0c;还是复杂的多表联动&#xff0c;甚至是大数据量的批量操作…

MAC环境安装(卸载)软件

MAC环境安装&#xff08;卸载&#xff09;软件 jdknode安装node&#xff0c;并实现不同版本的切换背景 卸载node从node官网下载pkg安装的node卸载用 homebrew 安装的node如果你感觉删的不够干净&#xff0c;可以再细分删除验证删除结果 jdk 1.下载jdk 先去官网下载自己需要的版…

VScode SSH 错误:Got bad result from install script 解決

之前vscode好好的&#xff0c;某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode&#xff0c;无效 3. 删除服务器上的~/.vscode-server 文件夹&#xff0c;无效 试过很多后&#xff0c;原来很可能是前一天anaconda卸载导致注册表项 步…

MATLAB中与矩阵运算相关的函数简介

d e t ( a ) det(a) det(a)表示求方阵的秩 t r a c e ( a ) trace(a) trace(a)表示求方阵对角线之和 i n v ( a ) inv(a) inv(a)表示求方阵的逆矩阵 t r i u ( a ) triu(a) triu(a)表示求矩阵的上三角部分&#xff0c;其余变成0 t r i l ( a ) tril(a) tril(a)表示求矩阵的…

20241227通过配置nomodeset参数解决更新grub之后,ubuntu20.04.5无法启动的问题

20241227通过配置nomodeset参数解决更新grub之后&#xff0c;ubuntu20.04.5无法启动的问题 2024/12/27 17:34 0.397475]pci0000:00:07.0:DPC:RPPI0 l0gsize 0 is invalid dev/nvmeon1p9:clean,251849/4276224 files,3266309/17089792 blocks 缘起&#xff1a;公司电脑要安装加密…

46. Three.js案例-创建颜色不断变化的立方体模型

46. Three.js案例-创建颜色不断变化的立方体模型 实现效果 知识点 Three.js基础组件 WebGLRenderer THREE.WebGLRenderer是Three.js提供的用于渲染场景的WebGL渲染器。它支持抗锯齿处理&#xff0c;可以设置渲染器的大小和背景颜色。 构造器 antialias: 是否开启抗锯齿&am…

ES elasticsearch-8.17.0-windows-x86_64使用

1、下载ES(elasticsearch 简称 ES 下载链接&#xff1a;https://www.elastic.co/downloads/elasticsearch) ES 下载链接&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-windows-x86_64.zip))&#xff0c;需要在修改ES配置&#xff0…