1. Cookie与Session基础概念解析
在Web开发领域,理解Cookie和Session的机制是构建安全、可靠用户认证系统的基石。作为HTTP协议无状态特性的解决方案,这两种技术几乎存在于每个现代Web应用中。
Cookie本质上是服务器发送到用户浏览器并保存在本地的小型数据片段(通常不超过4KB)。当浏览器再次请求同一网站时,会自动携带这些Cookie数据。典型的Cookie包含名称、值、域、路径、过期时间和安全标志等属性。例如电商网站用Cookie记录用户的购物车信息,即使用户关闭浏览器后重新打开,商品依然保留。
Session则是在服务器端维护的用户状态信息。服务器为每个会话创建唯一的Session ID(通常是一个128位哈希值),通过Cookie将这个ID传递给客户端。实际用户数据存储在服务器内存或持久化存储中,如Redis集群。这种设计既解决了HTTP无状态问题,又避免了敏感数据直接暴露在客户端。
关键区别:Cookie数据存储在客户端,Session数据存储在服务端。Cookie有大小和数量限制,Session理论上只受服务器资源限制。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Spring框架中的实现机制
2.1 默认行为分析
Spring Boot自动配置会创建名为JSESSIONID的会话Cookie(可通过server.servlet.session.cookie.name修改)。在没有显式配置时,Session默认存储在内存中,这会导致:
- 应用重启后会话丢失
- 集群环境下无法共享会话
- 内存泄漏风险(僵尸Session)
典型的内存Session存储结构如下表示例:
| 属性 | 类型 | 说明 |
|---|---|---|
| id | String | 会话唯一标识符 |
| creationTime | long | 创建时间戳 |
| lastAccessedTime | long | 最后访问时间 |
| maxInactiveInterval | int | 最大闲置时间(秒) |
| attributes | Map<String, Object> | 用户自定义属性 |
2.2 持久化方案选型
生产环境推荐使用集中式存储,Spring支持多种后端:
- Redis(推荐):
java复制@EnableRedisHttpSession public class SessionConfig { @Bean public LettuceConnectionFactory connectionFactory() { return new LettuceConnectionFactory(); } }- 优点:高性能、支持TTL自动过期、集群部署
- 关键配置:
spring.session.store-type=redis
