(5)JavaWeb Session域对象

  • 获取专属于当前对话的Session对象
  • 若果服务器端没有该会话的Session对象,会创建一个新的Session返回
  • 如果已经有了属于该会话的Session对象,直接将已有的Session返回
  • 本质就是根据SESSIONID判断该客户端是否在服务器上已经存在session了

调用request即可得到Session对象

//使用request来获取session
  HttpSession session = request.getSession();
  session.setAttribute("lk", "it666");

session的生命周期:

  • 创建
    • 第一次执行request.getSession()时创建
  • 销毁
    • 服务器关闭时
    • session过期/失效(默认30分钟),是从最后一次操作结束时计时
    • 手动销毁,session.invalate(较少使用)
    • 浏览器关闭,session就销毁,这句话时不正确的
  • 作用范围
    • 默认在一次会话中,也就是说在一次会话中任何资源公用一个session对象。

session的声明周期可以更改:
在全局的web.xml中有session的配置,粘贴到想要修改的项目里边的web.xml里边即可。

还有一种情况,在关闭浏览器之后,我们会发现获取不到之前存的session对象了。

原因:我们在创建session对象的时候,会创建一个sessionid,在写id的时候,是以cookie的形式来写的,而cookie的生命周期默认为会话级别,所以我们在关闭浏览器之后,会访问不到我们存的session对象。
!!!浏览器关闭,session对象没有被销毁,只是id被销毁。

//sessionServlet1
//使用request来获取session
  HttpSession session = request.getSession();
  //我们来创建一个Cookie,JSESSIONID可以通过session直接来获取
  Cookie cookie = new Cookie("JSESSIONID", session.getId());
  //设置cookie的携带路径
  cookie.setPath("/10-Cookie-Session");
  //设置cookie的生命周期
  cookie.setMaxAge(60*2);
  //将cookie发送给浏览器
  response.addCookie(cookie);
  System.out.println(session);
  session.setAttribute("lk", "it666");
//sessionServlet2
//通过sessionServlet2来获取session对象
  HttpSession session = request.getSession();
  System.out.println(session.getAttribute("lk"));

我们可以模拟session的创建过程,JSESSIONID我们自己创建一个cookie对象,来存放JSESSIONID,我们把他的生命周期设置为2分钟,这样浏览器关闭的时候,我们仍然可以访问到session对象

发布了20 篇原创文章 · 获赞 7 · 访问量 281
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览