Session与Cookie

Session与Cookie


一、Cookie

1. 什么是Cookie?

  • 定义:Cookie是服务器发送到用户浏览器并保存在本地的一小块数据(键值对),每次请求同一服务器时会被携带回服务器。
  • 核心作用:跟踪客户端状态,实现会话管理。
  • 特点
    • 大小限制:单个Cookie不超过4KB,浏览器最多保存约300个Cookie。
    • 不同浏览器不共享Cookie。
    • 默认存储在内存中,关闭浏览器后失效。

2. Cookie的基本操作

(1) 服务器保存Cookie到客户端

通过HttpServletResponseaddCookie方法添加Cookie:

// Java示例:创建Cookie并设置有效期(24小时)
Cookie cookie = new Cookie("username", "txjava");
cookie.setMaxAge(24 * 60 * 60);  // 存活时间(秒)
response.addCookie(cookie);
(2) 服务器读取客户端Cookie

通过HttpServletRequestgetCookies方法获取所有Cookie:

Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie c : cookies) {
        System.out.println(c.getName() + ":" + c.getValue());
    }
}

3. Cookie的生命周期

  • 默认行为:Cookie保存在浏览器内存中,关闭浏览器即失效。
  • 持久化Cookie:通过setMaxAge(seconds)设置存活时间:
    • setMaxAge(3600):Cookie存活1小时,保存在硬盘。
    • setMaxAge(0):立即删除Cookie。
    • setMaxAge(-1):默认值,仅内存存储。

4. Cookie的路径(Path)

  • 默认路径:Cookie的路径由请求的URL路径决定。例如,请求/app/login时,默认路径为/app
  • 作用规则:访问子路径时,会携带父路径的Cookie,反之则不会。
  • 手动设置路径
cookie.setPath("/app");  // 硬编码
cookie.setPath(request.getContextPath() + "/"); // 动态设置

5. Cookie保存中文

由于Cookie不支持直接存储中文,需通过URL编码和解码处理:

// 编码保存
Cookie cookie = new Cookie("username", URLEncoder.encode("张三", "UTF-8"));
response.addCookie(cookie);

// 解码读取
String username = URLDecoder.decode(cookie.getValue(), "UTF-8");

6. 浏览器的Cookie管理

  • 查看Cookie:通过浏览器开发者工具(如Chrome的Application面板)。
  • 禁用Cookie:在浏览器设置中禁用后,大部分网站无法正常登录(Session依赖Cookie)。

二、Session

1. 什么是Session?

  • 定义:Session是服务器端维护的会话对象,用于存储用户会话期间的数据。
  • 核心作用:在多次请求间共享数据(如用户登录信息)。
  • 生命周期
    • 创建:首次调用request.getSession()时生成。
    • 销毁:用户关闭浏览器、Session超时(默认30分钟)或调用session.invalidate()

2. Session的工作原理

  • 依赖Cookie:服务器通过名为JSESSIONID的Cookie将Session ID发送给客户端。
  • 流程
    1. 客户端首次访问服务器,服务器创建Session并返回JSESSIONID
    2. 后续请求携带JSESSIONID,服务器通过ID查找对应的Session对象。

3. Session与Cookie的区别

特性CookieSession
存储位置客户端浏览器服务器端
安全性较低(易被篡改)较高
数据容量小(4KB)大(受服务器内存限制)
生命周期可长期保存浏览器关闭或超时后失效
依赖关系依赖Cookie传递Session ID

四、注意事项

  1. 安全性
    • 敏感信息(如密码)应加密存储。
    • 避免在Cookie中直接存储用户隐私数据。
  2. 性能优化
    • 减少Session中存储的数据量。
    • 设置合理的Session超时时间。
  3. 兼容性
    • 若客户端禁用Cookie,可通过URL重写传递Session ID。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值