Java Web之Session和Cookie

本文深入讲解Session和Cookie的概念,包括它们的创建、获取、数据存取及生命周期管理。对比分析了Session与Cookie的区别,探讨了它们在Web开发中的应用。

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

Session

什么是Session

Session 是一个接口(HttpSession),是会话,用来维护客户端和服务器之间的技术。每个客户端都会有自己的一个 Session 会话。Session 会话中,人们经常用来保存登录之后的信息。

创建和获取Session

  1. 创建Session
request.getSession()
//第一次调用是:创建 Session 会话。
//之后调用都是:获取前面创建好的 Session 会话对象。
  1. 获取Session
getid()
//得到Session的会话id值。每个会话都有一个ID值。而且这个 ID 是唯一的。
//判断Session是不是刚创建出来的(新的)
isNew()
//true表示刚创建,false 表示获取之前创建

Session数据的存取

//往 Session 中保存数据
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
	req.getSession().setAttribute("key1", "value1"); 
    resp.getWriter().write("已经往 Session 中保存了数据"); 
}
//获取 Session 域中的数据
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    Object attribute = req.getSession().getAttribute("key1");           		resp.getWriter().write("从 Session 中获取出 key1 的数据是:" + attribute); 
}

Session的生命周期

//设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁,值为正数的时候,设定 Session 的超时时长。 负数表示永不超时(极少使用)
public void setMaxInactiveInterval(int interval)
//获取 Session 的超时时间
public int getMaxInactiveInterval()
//让当前 Session 会话马上超时
public void invalidate()

Session 默认的超时时间长为 30 分钟。这个时长可以在web.xml 配置文件中修改

<!--表示当前 web 工程创建出来的所有 Session 默认超时时长是 20 分钟--> 
    <session-config> 
    	<session-timeout>20</session-timeout> 
    </session-config>
    
//如果只想修改个别 Session 的超时时长
    session.setMaxInactiveInterval(int interval)
  • 服务器给每个用户(浏览器)创建一个Session对象
  • 一个Session独占一个浏览器,只要浏览器没有关闭,这个session就存在
  • 用户登录之后,整个网站它都可以访问

Cookie

什么是Cookie

Cookie 翻译是饼干的意思。Cookie 是服务器通知客户端保存键值对的技术。客户端有了 Cookie 后,每次请求都发送给服务器。

创建和获取Cookie

  1. 创建Cookie
protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    //1 创建 Cookie 对象
	Cookie cookie = new Cookie("key1", "value1"); 
    //2 通知客户端保存 
    Cookie resp.addCookie(cookie); 
 
    resp.getWriter().write("Cookie 创建成功");
}
  1. 获取Cookie
req.getCookies():Cookie[]

Cookie值的修改

方法:

  1. 先创建一个要修改的同名(key)的 Cookie 对象。
  2. 在构造器赋于新的 Cookie 值。
  3. 调用 response.addCookie( Cookie )。
Cookie cookie = new Cookie("key1","newValue1");  

resp.addCookie(cookie);

Cookie的生命控制

setMaxAge() 
//正数,表示在指定的秒数后过期;负数,表示浏览器一关,Cookie 就会被删除(默认值是-1); 零,表示马上删除 Cookie。

一个网站cookie是否会存在上限!

  • 一个Cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
  • Cookie大小有限制4kb
  • 300个cookie浏览器上限

删除cookie

  • 不设置有效期,关闭浏览器,自动消失
  • 设置有效期为0

编码解码

URLEncoder.encode("hello","utf-8");
URLDecoder.encode(cookie.getValue(),"UTF-8");

附加:获取时间 System.currentTimeMills()

Session 和 Cookie 的区别

  • Cookie 是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
  • Session 把用户的数据写到用户独占Session中,服务器保存(保存重要的信息,减少服务器资源的浪费)
  • Session对象由服务创建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值