【Linux】HTTP协议中的cookie和session

news2024/11/15 13:27:26

一、B站的登录和未登录——一种登录场景的演示

       我们现在上的是B站大学,所以对于B站,我们是很熟悉的。当我们打开浏览器,并访问B站网页时(很熟悉),会发现我们会自动登录上B站,为什么呢??因为在浏览器中,浏览器会有一个Cookie和站点数据,当我们将这些Cookie和站点数据删除以后,再次刷新网站,我们会发现现在我们处于未登录状态。

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

       B站是通过我们发送的请求中的字段进行校验,检验成功后,就可以登录成功。

       我们在使用HTTP协议请求网页时,我们会使用GET或者POST方法进行提交参数,服务器会收到数据并检验数据是否正确,然后返回响应,在响应中设置Set-Value字段,在浏览器中收到该响应后,我们会将提交的参数在每次请求网页时都带上该数据,那么服务器每次就可以检验请求,验证成功就登录成功了。

二、引入 HTTP Cookie

2.1 定义

       HTTP Cookie(也称为Web Cookie,浏览器Cookie或者简称为Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务器两个请求是否来自同一个浏览器,如保持用户的登录状态。记录用户偏好等。一般分为内存级和文件级Cookie。

2.2 工作原理

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

2.3 分类

       在定义中,我们可以知道Cookie一般分为内存级和文件级Cookie,所以Cookie分为两类:会话Cookie和持久Cookie。

  • 会话Cookie(Session Cookie):在浏览器关闭时失效
  • 持久Cookie(Persistent Cookie):带有明确的过期日期或持续时间,可以跨多个浏览器会话存在
  • 如果Cookie是一个持久性的cookie,那么他其实就是浏览器相关的特定目录下的一个文件。但是直接查看这些文件可能会看到乱码或者无法读取的内容,因为cookie文件通常以二进制或者sqlite格式存储。一般我们查看,直接在浏览器对应的选项中直接查看即可。

2.4 安全性

       由于Cookie是存储字客户端中的,因此存在被篡改或者窃取的风险。

2.5 用途

       Cookie的用途有很多,对我们自身的隐私息息相关,但是由于其存储在客户端中,所以其不是很安全,我们需要重新设置一个新的东西:Session。

  • 用户认证和会话管理(最重要)
  • 跟踪用户行为
  • 缓存用户偏好

三、认识cookie

  • HTTP存在一个报头选项,Set-Cookie,可以用来进行给浏览器设置Cookie值。
  • 在HTTP响应头中添加,客户端(如浏览器)获取并自行设置保存Cookie。

3.1 基本格式

Set-Cookie: <name>=<value>
其中 <name> 是 Cookie 的名称,<value> 是 Cookie 的值。

3.2 完整的Set-Cookie示例

Set-Cookie: username=peter; expires=Thu, 18 Dec 2024 12:00:00
UTC; path=/; domain=.example.com; secure; HttpOnly

       时间格式必须遵守RPC 1123标准,具体格式样例:Tue,01 Jan 2030 12:34:56 GMT或者UTC(推荐)。

关于时间的解释:

  • Tue: 星期二(星期几的缩写)
  • ,: 逗号分隔符
  • 01: 日期(两位数表示)
  • Jan: 一月(月份的缩写)
  • 2030: 年份(四位数)
  • 12:34:56: 时间(小时、分钟、秒)
  • GMT: 格林威治标准时间(时区缩写)

注意事项:

  • 每一个Cookie属性都以分号(;)和空格( )分隔
  • 名称和值之间使用等号(=)分隔
  • 如果Cookie的名称或值包含特殊字符(比如空格,分号,逗号等),则需要进行URL编码

3.3 Cookie的声明周期

  • 如果设置了expires属性,则Cookie将在指定的日期/时间后过期。
  • 如果没有设置expires属性,则Cookie默认为会话Cookie,即当浏览器关闭时过期。

3.4 安全性考虑(了解即可)

  • 使用secure标志可以确保Cookie仅仅在HTTPS连接上发送,从而提高安全性。
  • 使用HttpOnly标志可以防止客户端脚本(如JavaScript)访问Cookie,从而防止XSS攻击。
  • 通过合理设置Set-Cookie的格式和属性,可以确保Cookie的安全性、有效性和可访问性,从而满足Web应用程序的需求。

3.5 单独使用Cookie,有什么问题?

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

四、引入HTTP Session

4.1 Session的定义

       HTTP Session是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于HTTP协议是无状态的(每一个请求都是独立的),因此服务器需要通过Session来记住用户的信息。

4.2 Session的工作原理

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

4.3 Session的安全性

  • 与Cookie相似,由于是在Session ID是在客户端和服务器之间传递的,因此也存在被窃取的风险。
  • 但是一般虽然Cookie被盗取了,但是用户只泄露了一个Session ID,私密信息暂时没有被泄露的风险。
  • Session ID便于服务端进行客户端有效性的管理,比如异地登录。
  • 可以通过HTTPS和设置合适的Cookie属性(比如HttpOnly和Secure)来增强安全性。

4.4 超时和实效

  • Session可以设置超时时间,当超过这个时间后,Session会自动失效。
  • 服务器也可以主动使Session失效,例如当用户登出时。

4.5 Session的用途

  • 用户认证和会话管理
  • 存储用户的临时数据(比如购物车内容)
  • 实现分布式系统的会话共享(通过将会话数据存储在共享数据库或缓存中)

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

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

相关文章

解锁 macOS 剪贴板历史记录,高效复制、粘贴技巧

在Mac上&#xff0c;我们经常需要在不同文档之间复制和粘贴内容。然而&#xff0c;macOS自带的剪贴板只能保存最后一个复制项&#xff0c;这大大限制了我们的工作效率。幸运的是&#xff0c;一些第三方应用程序可以帮助我们查看和管理剪贴板的历史记录&#xff0c;从而提升我们…

基于RP2350 MCU的树莓派Pico 2开发板及MicroPython编程使用

2021年1月21日,树莓派基金会同时发布了第1代RP2040 MCU芯片和基于RP2040 MCU的第1代树莓派Pico开发板(Raspberry Pi Pico/ Raspberry Pi Pico 1)。2024年8月8日,树莓派基金会又发布了第2代RP2350 MCU芯片并推出了基于RP2350 MCU的第2代树莓派Pico开发板(Raspberry Pi Pico 2)…

pandas:一个强大的数据处理Python库

我是东哥&#xff0c;一个热衷于探索Python世界的自媒体人。今天&#xff0c;我要为大家介绍一个在Python数据分析领域中非常强大的库——Pandas。如果你对数据分析充满好奇&#xff0c;或者正在寻找一个简单易用的库来处理和分析数据&#xff0c;那么Pandas绝对是你的不二之选…

MySQL——库操作

首先先来说一下MySQL中常见的操作&#xff1a; 1. 清屏 system clear; 2. 如果你使用的是腾讯云的Ubuntu&#xff0c;登陆的时候用户名可能是ubuntu&#xff0c;进入后可以使用 sudo -i 切换为高级用户 一、创建数据库 create database db_name; 示例&#xff1a; mysql> …

汽车测试展︱AUTO TECH 2025 广州国际汽车测试测量技术展览会

汽车测试展︱AUTO TECH 2025 广州国际汽车测试测量技术展览会 The China Guangzhou Automotive Test Expo 2025 2025年11月20-22日&#xff0c;专注于华南地区专业的汽车质量控制展览会&#xff0c;将在广州保利世贸博览馆继续举办。是关于各种汽车测试解决方案的专业展如汽车电…

[C高手编程] static与extern: 作用域、可见性与存储类全面解析

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;C高手编程-面试宝典/技术手册/高手进阶⚡️⚡️&#x1f496;&#x1f496; 「C高手编程」专栏融合了作者十多年的C语言开发经验&#xff0c;汇集了从基础到进阶的关键知识点&#xff0c;是不可多得的知识宝典。如果你是即将…

高职人工智能训练师边缘计算实训室解决方案

一、引言 随着物联网&#xff08;IoT&#xff09;、大数据、人工智能&#xff08;AI&#xff09;等技术的飞速发展&#xff0c;计算需求日益复杂和多样化。传统的云计算模式虽在一定程度上满足了这些需求&#xff0c;但在处理海量数据、保障实时性与安全性、提升计算效率等方面…

jenkins 部署应用到多个环境

在日常开发的过程中&#xff0c;我们经常会遇到将应用程序部署到多个环境的需求场景&#xff0c;如会先发布到测试环境&#xff0c;由测试人员进行测试&#xff0c;成功之后&#xff0c;会继续将当前应用部署到集成环境&#xff0c;进行集成测试&#xff0c;全部通过后&#xf…

单位权中误差 详细介绍

单位权中误差&#xff08;Unit Weight Error, UWE&#xff09;是用于描述测量数据不确定性的一个统计量&#xff0c;特别是在地理信息系统&#xff08;GIS&#xff09;、导航和定位系统中。它主要用于评估和比较不同测量系统或算法的精度。以下是对单位权中误差的详细介绍&…

C++第一节入门

一、历史 C是在C上继承拓展的&#xff01; java是一家公司&#xff08;甲骨文&#xff09;借鉴C生成的&#xff01; C#是微软借鉴java生成的&#xff01; 二、命名空间 当我们定义一个名叫rand的变量&#xff0c;但是由于stdlib头文件里面有个函数跟rand重名&#xff01;因此…

如何在 Linux 系统中禁用用户登录 ?

管理 Linux 系统上的帐户是系统管理员的一项重要任务。一个常见的任务是禁用帐户&#xff0c;由于各种原因可能需要禁用帐户&#xff0c;例如当员工离开公司或出于安全目的需要临时禁用访问时。 本指南将以简单易懂的步骤引导您完成在 Linux 系统上禁用帐户的过程。 Step 1: …

Ruoyi Cloud 本地启动

参考 http://doc.ruoyi.vip/ https://gitee.com/y_project/RuoYi-Cloud https://blog.csdn.net/cs_dnzk/article/details/135289966 https://doc.ruoyi.vip/ruoyi-cloud/cloud/seata.html#%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%BB%8D 拉取代码本地跑通 用 git 从 ruoyi 微服务版仓…

HCIA--实验十一:单区域OSPF路由实验

一、实验内容 1.需求/要求&#xff1a; 使用三个路由器互联&#xff0c;各自配置一个loopback接口&#xff0c;在三个路由器上配置ospf动态路由协议&#xff1b; 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.router配置基本信息 各接口的ip地址、loopback接…

华为OD机试真题 - 特殊的加密算法 - 深度优先搜索DFS(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

C++:priority_queue(优先级队列)的模拟实现

目录 一、什么是优先级队列 二、优先级队列的定义 三、优先级队列的常用接口 四、模拟实现一个优先级队列 1、posh接口 2、empty接口、size接口和top接口 3、pop接口 4、构造函数 五、整体代码 一、什么是优先级队列 首先优先级队列不是队列&#xff0c;C 中的优先队…

IP包头的总长度字段和UDP包头的长度字段之间的关系

IP包头的总长度字段和UDP包头的长度字段之间的关系&#xff0c;并通过实例加以说明。 IP包头的总长度字段 **总长度&#xff08;Total Length&#xff09;**字段是一个16位的字段&#xff0c;表示整个IP数据包的总长度&#xff0c;包括IP包头和数据部分。单位是字节。由于该字…

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人&#xff0c;是不是经常需要制作各种PPT来分享我的生活和想法。但是&#xff0c;你们知道&#xff0c;有时候灵感来了&#xff0c;时间却不够用了&#xff01;&#x1f629;直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手&#…

PID控制算法(二)

&#xff08;BIlibili借鉴&#xff09;PID参数整定连接&#xff1a;Webpack App (rossning92.github.io) C的基本程序代码&#xff1a; 借鉴链接&#xff1a;PID超详细教程——PID原理串级PIDC代码在线仿真调参-CSDN博客 #include <iostream>using namespace std;stru…

【信创】统信UOS桌面UT-2024-0027漏洞修复

原文链接&#xff1a;【信创】统信UOS系统UT-2024-0027漏洞修复 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于统信UOS桌面操作系统UT-2024-0027漏洞修复的文章。漏洞修复是确保系统安全性的重要步骤&#xff0c;及时更新和修复系统中的安全漏洞&#xff0c;可…