Cookie、Session

本文深入探讨了Web应用中会话管理的两种关键技术:Cookie和Session。详细解释了Cookie的实现原理,包括创建、发送、获取及使用细节,如设置有效时长、保存中文和注意事项。同时,阐述了Session的工作机制,依赖于Cookie实现,介绍了如何获取、存取和销毁Session,以及解决浏览器关闭导致的问题。

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

Cookie、Session

1.会话技术-Cookie

Cookie实现原理

一次会话:从浏览器打开第一访问服务器开始直到一方关闭(通常是浏览器关闭)结束。

Cookie客户端,但是Cookie是在服务器端创建的,通过响应头的形式发送给浏览器保存;当浏览器下一次访问服务器的时候会自动带着这个Cookie过来,这个时候在服务器端又可以获取这个Cookie存值、取值;

Cookie cookie=new Cookie(String name,String value)//创建Cookie
response.addCookie(cookie);//发送给浏览器保存

Cookie[] cookies=reqeust.getCookies();//获取浏览器发送过来的所有Cookie
String name=cookie.getName() ;//获取Cookie的名称
String value=cookie.getValue() ;//获取Cookie的名称
Cookie使用细节
1、设置有效时长:
      cookie.setMaxAge(int second)//0表示删除Cookie,负数表示默认有效时长:一次会话
2、保存中文:
      //保存之前对中文进行url编码
      String value = URLEncoder.encode("你好", "utf-8"); //  %4E%A8%6D...
      Cookie cookie = new Cookie("msg",value);
      
      //获取Cookie值之后使用URL解码
      String value=cookie.getValue();
      value=URLDecoder.decode(value,"utf-8");
3、Cookie使用的注意事项
      a.Cookie存到客户端的
      b.Cookie有存活时间
      c.Cookie有存储数据限制大小
      d.Cookie只能保存字符串类型不敏感的数据。使用场景例如:保存用户对网站的设置信息;记录上一次访问时间;用户的浏览记录;记住用户名。
4、Cookie共享问题
      setPath("/")对整个服务器的项目都共享Cookie ,  默认情况下是只对自己的项目共享Cookie

2.会话技术-session

HttpSession实现原理

​ session属于服务端技术,依赖于Cookie实现,在服务器端第一次调用request.getSession()方法创建session,同时会产生一个随机的唯一标识id,服务器会将这个id保存在Cookie中,通过Cookie将这个id发送给客户端保存。当浏览器再次访问服务器时,会自动将这个保存sessionid的Cookie发送过,我们通过request.getSession()就自动通过sessionid获取到之前的session,进行存值、取值等操作。

//1.获取session
HttpSession session=request.getSession();
//2.存值、取值、移除值
session.setAttribute(String name,Object value)
Object value=session.getAttribute(String name)
session.removeAttribute(String name)

//销毁session
session.invalidate();
HttpSession使用细节
1、浏览器关闭了,服务器没有关闭,这个时候有用Cookie消失了,就无法再获取之前的session;
  	解决:将保存sessionid的Cookie序列话(设置有效时长)  
  	Cookie cookie=new Cookie("JSESSIONID",session.getId());
  	cookie.setMaxAge(60 x 60 x 24)
  	response.addCookie(cookie)
2、浏览器没有关闭,服务器(正常)关闭了,这个时候服务器会将session序列号到硬盘中,当我们启动服务器后,服务器有自动将session反序列化到内存中;

Session默认的失效时间是30分钟.可以在web.xml中配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值