[JAVAEE笔记]06.Cookie和Session

本文详细介绍了JAVAEE中的会话技术Cookie和Session。Cookie作为客户端会话技术,数据存储在客户端,易于读取但安全性较低。Session是服务器端会话技术,数据存储在服务器端,提供更高的安全性。内容涵盖了Cookie的创建、发送、路径设置和中文支持,以及Session的创建、生命周期和两者之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

会话技术 Cookie&Session

会话技术的抽象理解

浏览器第⼀次给服务器资源发送请求,会话建⽴,直到有⼀⽅断开为⽌的过程,称为⼀次会话。

会话技术就是记录这次会话中客户端的状态与数据的。⼀次会话中包含多次请求和响应。

会话技术的功能:在⼀次会话的范围内的多次请求间,共享数据

Cookie技术

客户端会话技术:Cookie

我们可以将Cookie理解为一把钥匙,这个钥匙存储着我们登陆而保存的钥匙.

  • 优缺点:

数据存储在客户端本地,减少服务器端的存储的压⼒,但安全性不好,因为客户端可以清除cookie

Cookie的创建与发送
Cookie cookie1 = new Cookie("username", "zhangsan");
        
response.addCookie(cookie1);
  
多个Cookie的创建与发送
 Cookie cookie1 = new Cookie("username", "zhangsan");
 Cookie cookie3 = new Cookie("username", "lisi");
 Cookie cookie2 = new Cookie("password", "123456");
 
 response.addCookie(cookie1);
 response.addCookie(cookie2);
 response.addCookie(cookie3);
Cookie存在时间的设置
  • 默认情况下,当浏览器关闭后,Cookie数据被销毁
  • 持久化存储:setMaxAge(int seconds)
  1. 正数:将Cookie数据写到硬盘的⽂件中。持久化存储。并指定cookie存活时间,时间到后,cookie⽂件⾃动失效
  2. 负数:默认值30分钟
  3. 零:删除cookie信息
Cookie cookie1 = new Cookie("username", "zhangsan");
Cookie cookie2 = new Cookie("password", "123456");
cookie1.setMaxAge(-1);//默认值30分钟
cookie2.setMaxAge(60 * 5);//300秒
Cookie设置携带路径: setPath()

1.同一目录的Servlet可以携带Cookie
2.同一应用的Servlet需要设置路径:request.getContextPath()
3.同一服务器下的Servlet设置路径:"/"

Cookie cookie1 = new Cookie("username", "zhangsan");
Cookie cookie2 = new Cookie("password", "123456");
//cookie1设置携带路径为当前服务器
cookie1.setPath("/");
//cookie2设置携带路径为当前应用 
cookie2.setPath(request.getContextPath());
Cookie的中文支持

编码: URLEncoder.encode(“张三”, “utf-8”);
解码: URLDecoder.decode(value, “utf-8”);

String name = URLEncoder.encode("张三", "utf-8");
Cookie cookie3 = new Cookie("name", name);
response.addCookie(cookie3);

Session技术

服务器端会话技术:Session

第一次访问服务器, 会创建session对象, 并且生成JSESSIONID编号,

将id编号通过set-cookie发送给客户端保存,再次访问服务器,

客户端会通过cookie将id编号携带到服务器, 通过id来获得session对象

JSESSIONID的持久化:

  • 优缺点:

在服务器响应的时候,把更新后的Cookie返回给客户端,以便于下次发起请求

将数据存储到服务器端,安全性相对好,增加服务器的压⼒。

Session的简单创建

延长JSESSIONID所在的cookie时间maxAge()
创建一个cookie, 并且设置持久化时间

HttpSession session = request.getSession();//获得Session对象
session.setAttribute("name","张三");//设置Session对象内容,Session支持任意类型
String id = session.getId();//获得JSESSIONID
Cookie cookie = new Cookie("JSESSIONID", id);//将JSESSIONID传入到Cookie中
cookie.setPath(request.getContextPath());//设置Cookie的携带路径为当前应用
cookie.setMaxAge(Integer.MAX_VALUE);// 设置Cookie的持久化时间
response.addCookie(cookie);//添加Cookie到响应头中
细节
  1. 当客户端关闭后,服务器不关闭,两次获取session是否为同⼀个?

默认情况下。不是。

如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最⼤存活时间,让cookie持久化保存。

  1. 客户端不关闭,服务器关闭后,两次获取的session是同⼀个吗?

不是同⼀个,但是要确保数据不丢失。tomcat⾃动完成以下⼯作:

  • session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上
  • session的活化:在服务器启动后,将session⽂件转化为内存中的session对象即可
  1. session什么时候被销毁?
  • 服务器关闭
  • session对象调⽤invalidate()
  • session默认失效时间 30分钟

Cookie与Session的区别

  1. session存储数据在服务器端,Cookie在客户端
  2. session没有数据⼤⼩限制,Cookie有
  3. session数据安全,Cookie相对于不安全
  4. session可以存储任意类型数据,Cookie只能存储字符串类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值