HTTP cookie 与 session

1.Cookie

1.1 概念

由于HTTP是无状态,无连接的,由于为了让用户的使用简便一些,于是诞生了cookie 与 session

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

1.2 ⼯作原理

当⽤⼾第⼀次访问⽹站时,服务器会在响应的HTTP头中设置 Set-Cookie 字段,⽤于发送
Cookie到⽤⼾的浏览器。
浏览器在接收到Cookie后,会将其保存在本地(通常是按照域名进⾏存储)。
在之后的请求中,浏览器会⾃动在 HTTP 请求头中携带 Cookie 字段,将之前保存的Cookie
信息发送给服务器。
会话 Cookie(Session Cookie) :在浏览器关闭时失效。
持久 Cookie(Persistent Cookie) :带有明确的过期⽇期或持续时间,可以跨多个浏
览器会话存在。
如果 cookie 是⼀个持久性的 cookie ,那么它其实就是浏览器相关的,特定⽬录下的⼀个⽂件。但直接查看这些⽂件可能会看到乱码或⽆法读取的内容,因为 cookie ⽂件通常以⼆进制或 sqlite 格式存储。⼀般查看,直接在浏览器对应的选项中直接查看即可。

1.3 用途

⽤⼾认证和会话管理(最重要)
跟踪⽤⼾⾏为
缓存⽤⼾偏好等
⽐如在chrome浏览器下,可以直接访问:chrome://settings/cookies

1.4 cookie的基本格式

HTTP 存在⼀个报头选项: Set-Cookie , 可以⽤来进⾏给浏览器设置 Cookie 值。
在 HTTP 响应头中添加,客⼾端(如浏览器)获取并⾃⾏设置并保存 Cookie 。

Set-Cookie: <name>=<value>
其中 <name> 是 Cookie 的名称,<value> 是 Cookie 的值。
完整示例
Set-Cookie: username=peter; expires=Thu, 18 Dec 2024 12:00:00 UTC; path=/;
domain=.example.com; secure; HttpOnly

一步一步来看

首先username=peter,username是 Cookie 的名称,peter是 Cookie 的值,代表账户名和密码

expires=Thu, 18 Dec 2024 12:00:00 UTC,这代表设置 Cookie 的过期⽇期/时间。
如果设置了 expires 属性,则 Cookie 将在指定的⽇期/时间后过期。
如果没有设置 expires 属性,则 Cookie 默认为会话 Cookie,即当浏览器关闭时过期
时间格式必须遵守RFC 1123标准,具体格式样例: Tue, 01 Jan 2030 12:34:56 GMT或者UTC(推荐)
Tue: 星期⼆(星期⼏的缩写)
,: 逗号分隔符
01: ⽇期(两位数表⽰)
Jan: ⼀⽉(⽉份的缩写)
2030: 年份(四位数)
12:34:56: 时间(⼩时、分钟、秒)
GMT: 格林威治标准时间(时区缩写)

path=/;限制 Cookie 发送到服务器的哪些路径。默认为设置它的路径,利用这个就可以区分那些用户可以访问,那些用户不能访问(VIP和非VIP用户)

下面三个了解即可

domain=.example.com指定哪些主机可以接受该 Cookie。默认为设置它的主机。

secure 仅当使⽤ HTTPS 协议时才发送 Cookie。这有助于防⽌ Cookie 在不安全的 HTTP 连接中被截获。

HttpOnly标记 Cookie 为 HttpOnly,意味着该 Cookie 不能被客⼾端脚本(如JavaScript)访问。这有助于防⽌跨站脚本攻击(XSS)

注意:

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

1.5 安全性问题

由于 Cookie 是存储在客⼾端的,因此存在被篡改或窃取的⻛险,此时就需要Session

2. Session

2.1 概念

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

2.2 ⼯作原理

当⽤⼾⾸次访问⽹站时,服务器会为⽤⼾创建⼀个唯⼀的 Session ID ,并通过 Cookie 将其
发送到客⼾端。
客⼾端在之后的请求中会携带这个 Session ID ,服务器通过 Session ID 来识别⽤⼾,从⽽
获取⽤⼾的会话信息。
服务器通常会将 Session 信息存储在内存、数据库或缓存中。
Session同样在服务器中需要管理起来,对此使用一个类就可以

2.3 ⽤途

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

2.4 安全性问题

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

3.总结

HTTP Cookie和Session都是⽤于在Web应⽤中跟踪⽤⼾状态的机制。Cookie是存储在客⼾端的,⽽Session是存储在服务器端的。它们各有优缺点,通常在实际应⽤中会结合使⽤,以达到最佳的⽤⼾体验和安全性。

相关推荐
mounter6255 小时前
【硬核前沿】CXL 深度解析:重塑数据中心架构的“高速公路”,Linux 内核如何应对挑战?-- CXL 协议详解与 LSF/MM 最新动态
linux·服务器·网络·架构·kernel
ACP广源盛139246256737 小时前
破局 Type‑C 切换器痛点@ACP#GSV6155+LH3828/GSV2221+LH3828 黄金方案
c语言·开发语言·网络·人工智能·嵌入式硬件·计算机外设·电脑
嵌入式小企鹅8 小时前
蓝牙学习系列(八):BLE L2CAP 协议详解
网络·学习·蓝牙·ble·协议栈·l2cap
handsomestWei9 小时前
Docker引擎API接入配置
运维·http·docker·容器·api
广州灵眸科技有限公司9 小时前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法
byoass10 小时前
csdn_upload_005
网络·安全·云计算
IT WorryFree10 小时前
飞塔防火墙与第三方设备进行IPSEC故障诊断期间,用户可能会观察到以下错误:
linux·服务器·网络
不是书本的小明12 小时前
K8S应用优化方向
网络·容器·kubernetes
~plus~13 小时前
.NET 8 C# 委托与事件实战教程
网络·c#·.net·.net 8·委托与事件·c#进阶
w61001046614 小时前
CKA-2026-Service
linux·服务器·网络·service·cka