什么是Cookie与Session?(一文搞懂)

🏷️ 365bet体育投注站 🕒 2025-10-16 10:13:24 👤 admin 👁️ 8681 ❤️ 129
什么是Cookie与Session?(一文搞懂)

在Web开发中,用户状态管理是一个重要的概念。由于HTTP协议的无状态性,每次请求都是独立的,这意味着服务器无法识别连续的请求是否来自同一用户。为了克服这一限制,Cookie和Session应运而生。本文将详细讲解Cookie和Session的概念、工作原理、优缺点以及它们的使用场景,并通过示例帮助理解。

一、Cookie

1.1 什么是Cookie

如果把一次网站访问比作一次旅程,那么Cookie就是旅途中你随身携带的一张身份卡片。这张卡片上记录了你的一些信息,每次你进入某个站点时,都会向站点展示这张卡片,站点就能“记住”你。

Cookie是存储在用户浏览器中的小数据片段,由服务器发送并由浏览器在后续请求中携带,帮助服务器识别用户。每个Cookie都是一个键值对,通常包含以下属性:

名称:Cookie的名称值:Cookie的值域:Cookie适用的域路径:Cookie适用的路径过期时间:Cookie的有效期安全标志:指示Cookie是否仅通过HTTPS传输1.2 Cookie的工作原理

服务器发送Cookie:用户首次访问网站时,服务器生成一个Cookie并通过HTTP响应头Set-Cookie发送给浏览器。浏览器存储Cookie:浏览器接收到Cookie后将其存储。浏览器发送Cookie:用户再次访问该网站时,浏览器会在HTTP请求头中携带相应的Cookie。服务器读取Cookie:服务器读取Cookie并根据其内容识别用户。1.3 Cookie示例

假设我们在一个电商网站上有一个用户偏好设置功能,可以通过Cookie来存储用户的语言偏好。

设置Cookie的响应头示例

Set-Cookie: language=en; Path=/; HttpOnly; Secure

浏览器请求时携带Cookie的请求头示例

Cookie: language=en

1.4 代码示例

设置Cookie的JavaScript代码

document.cookie = "language=en; path=/; Secure; HttpOnly";

读取Cookie的JavaScript代码

function getCookie(name) {

let cookieArr = document.cookie.split(";");

for (let i = 0; i < cookieArr.length; i++) {

let cookiePair = cookieArr[i].split("=");

if (name === cookiePair[0].trim()) {

return decodeURIComponent(cookiePair[1]);

}

}

return null;

}

// 获取语言偏好设置

let language = getCookie("language");

console.log("Preferred language: " + language);

1.5 Cookie的优缺点

优点

轻量级:适用于存储少量数据。跨请求共享:可以在不同请求之间传递数据。缺点

安全性低:敏感信息易被窃取。容量限制:每个域名下的Cookie数量和大小有限。性能影响:请求中携带过多Cookie会影响性能。二、Session

2.1 什么是Session

如果把访问网站比作住酒店,那么Session就像是你在前台登记入住后,得到的一张房卡。这张房卡是唯一的,你可以用它进出房间,前台也能通过这张卡片知道你住在哪个房间,并提供相应的服务。Session存储在服务器端,通过唯一的Session ID标识用户。Session ID通常存储在Cookie中,并在每次请求时发送给服务器,以便服务器识别用户并从Session中读取用户状态信息。

2.2 Session的工作原理

创建Session:用户首次访问网站时,服务器创建一个Session,并生成一个唯一的Session ID。发送Session ID:服务器通过Set-Cookie响应头将Session ID发送给浏览器。存储Session:服务器在内存或持久化存储中保存Session数据。浏览器发送Session ID:用户再次访问网站时,浏览器在请求中携带Session ID。服务器读取Session:服务器根据Session ID读取相应的Session数据。2.3 Session示例

假设我们在一个电商网站上有一个购物车功能,可以通过Session来存储用户的购物车信息。

设置Session ID的响应头示例

Set-Cookie: JSESSIONID=xyz789; Path=/; HttpOnly; Secure

浏览器请求时携带Session ID的请求头示例

Cookie: JSESSIONID=xyz789

2.4 代码示例

创建和使用Session的Java代码(Spring Boot示例)

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;

import java.util.List;

import java.util.ArrayList;

@RestController

public class ShoppingCartController {

@GetMapping("/add-to-cart")

public String addToCart(HttpSession session) {

List cart = (List) session.getAttribute("cart");

if (cart == null) {

cart = new ArrayList<>();

session.setAttribute("cart", cart);

}

cart.add("Item1");

return "Item added to cart!";

}

@GetMapping("/view-cart")

public List viewCart(HttpSession session) {

List cart = (List) session.getAttribute("cart");

if (cart == null) {

cart = new ArrayList<>();

}

return cart;

}

}

2.5 Session的优缺点

优点

安全性高:Session数据存储在服务器端,安全性较高。存储容量大:可以存储更多的数据,不受浏览器限制。缺点

占用服务器资源:大量用户会占用服务器内存或存储空间。依赖Cookie:需要通过Cookie或URL传递Session ID。三、Cookie与Session的对比

方面CookieSession存储位置客户端(浏览器)服务器安全性较低,易被窃取较高,数据存储在服务器端存储容量有限,每个Cookie大小限制约4KB较大,取决于服务器存储能力性能影响请求中携带过多Cookie会影响性能占用服务器资源生命周期可设置过期时间,长时间存储会话结束或超时失效使用场景适合存储少量非敏感数据,如偏好设置适合存储用户状态、敏感数据四、使用场景

4.1 Cookie的使用场景

用户偏好设置:存储用户的语言、主题等偏好设置。跟踪用户行为:用于广告、分析用户行为等。4.2 Session的使用场景

用户认证:存储用户登录状态、权限等信息。购物车:在电商网站中存储用户的购物车信息。

相关文章