HttpSession对象

  • HttpSession对象
    • 获取对象以及常用方法
    • 标识符
    • session域对象
    • session对象的销毁
  • 请求之间需要数据共享就使用Session对象

HttpSession对象

HttpSession对象是 javax.servlet.http.HttpSession 的实例,该接口并不像 HttpServletRequest 或 HttpServletResponse 还存在一个父接口,该接口只是一个纯粹的接口。这因为 session 本身就属于 HTTP 协议的范 畴。

Session对象中的数据可以在多次Request中使用,而Request中在一次中使用。

对于服务器而言,每一个连接到它的客户端都是一个 session,servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。可以通过此接口查看和操作有关某个会话的信息,比如会话标识符、创建时间和最后一 次访问时间。在整个 session 中,最重要的就是属性的操作。

session 无论客户端还是服务器端都可以感知到,若重新打开一个新的浏览器,则无法取得之前设置的 session,因为每一个 session 只保存在当前的浏览器当中,并在相关的页面取得。

Session 的作用就是为了标识一次会话,或者说确认一个用户;并且在一次会话(一个用户的多次请求)期间共享数 据。我们可以通过 request.getSession()方法,来获取当前会话的 session 对象。

获取对象以及常用方法

        //创建session对象HttpSession session = request.getSession();//获取标识符String ID = session.getId();System.out.println(ID);//获取创建时间long creationTime = session.getCreationTime();System.out.println(creationTime);//获取最后一次访问的时间long lastAccessedTime = session.getLastAccessedTime();System.out.println(lastAccessedTime);//判断是否是新的session对象boolean isNewSession = session.isNew();System.out.println(isNewSession);

刷新页面就是一次新的访问。

标识符

JSESSIONID Session 既然是为了标识一次会话,那么此次会话就应该有一个唯一的标志,这个标志就是sessionId。

每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSIONID 的 cookie,如果没有则认为这是一次新的会话,会创建 一个新的 session 对象,并用唯一的 sessionId 为此次会话做一个标志。如果有 JESSIONID 这 个cookie回传,服务器则会根据 JSESSIONID 这个值去查看是否含有 id为JSESSION值的session 对象,如果没有则认为是一个新的会话,重新创建一个新的 session 对象,并标志此次会话; 如果找到了相应的 session 对象,则认为是之前标志过的一次会话,返回该 session 对象,数据达到共享。

这里提到一个叫做 JSESSIONID 的 cookie,这是一个比较特殊的 cookie,当用户请求服务器时,如果访问了 session,则服务器会创建一个名为 JSESSIONID,值为获取到的 session(无论是获取到的还是新创建的)的 sessionId 的 cookie 对象,并添加到 response 对象中,响应给客户端,有效时间为关闭浏览器。

所以 Session 的底层依赖 Cookie 来实现。

session域对象

Session 用来表示一次会话,在一次会话中数据是可以共享的,这时 session 作为域对象存在,可以通过 setAttribute(name,value) 方法向域对象中添加数据,通过 getAttribute(name) 从域对象中获取数据,通过 removeAttribute(name) 从域对象中移除数据。

// 获取session对象
HttpSession session = request.getSession();
// 设置session域对象
session.setAttribute("uname","admin");
// 获取指定名称的session域对象
String uname = (String) request.getAttribute("uname");
// 移除指定名称的session域对象
session.removeAttribute("uname");

数据存储在 session 域对象中,当 session 对象不存在了,或者是两个不同的 session 对象时,数据也就不能共享 了。这就不得不谈到 session 的生命周期。

session对象的销毁

  1. 默认时间到期

    当客户端第一次请求 servlet 并且操作 session 时,session 对象生成,Tomcat 中 session 默认的存活时间为 30min,即你不操作界面的时间,一旦有操作,session 会重新计时。 那么 session 的默认时间可以改么?答案是肯定的。 可以在 Tomcat 中的 conf 目录下的 web.xml 文件中进行修改。

    <!-- session 默认的最大不活动时间。单位:分钟。 -->
    <session-config><session-timeout>30</session-timeout>
    </session-config>
    
  2. 自己设定到期时间

    当然除了以上的修改方式外,我们也可以在程序中自己设定 session 的生命周期,通过 session.setMaxInactiveInterval(int) 来设定 session 的最大不活动时间,单位为秒。

    // 获取session对象
    HttpSession session = request.getSession();
    // 设置session的最大不活动时间
    session.setMaxInactiveInterval(15); // 15秒
    

    当然我们也可以通过 getMaxInactiveInterval() 方法来查看当前 Session 对象的最大不活动时间。

    // 获取session的最大不活动时间
    int time = session.getMaxInactiveInterval();
    
  3. 立刻失效

    或者我们也可以通过 session.invalidate() 方法让 session 立刻失效

    // 销毁session对象
    session.invalidate();
    
  4. 关闭浏览器

    从前面的 JESSIONID 可知道,session 的底层依赖 cookie 实现,并且该 cookie 的有效时间为关闭浏览器,从而 session 在浏览器关闭时也相当于失效了(因为没有 JSESSION 再与之对应)。

  5. 关闭服务器

    当关闭服务器时,session 销毁。Session 失效则意味着此次会话结束,数据共享结束。

请求之间需要数据共享就使用Session对象

HttpSession对象相关推荐

  1. HTTPSession对象知识总结

    HTTPSession对象 HTTPSession对象的特点: 1.HTTPSession对象是保存在服务器端的: 2.HTTPSession允许存储任何数据类型: 3.HTTPSession存储数据 ...

  2. webview session不失效_不懂HttpSession对象看这里--乐字节

    HttpSession对象 HttpSession对象是 javax.servlet.http.HttpSession 的实例,该接口并不像 HttpServletRequest 或 HttpServ ...

  3. JavaWeb——内置对象session与httpSession对象是同一个东西么?

    JavaWeb--内置对象session与httpSession对象是同一个东西么? 首先,内置对象session与httpSession对象不是同一个东西 session和HttpSession是不 ...

  4. 内置对象session与httpSession对象是同一个东西么?

    ANSWER 不是,session对象指的是客户端与服务器端的一次会话,从客户端连到服务器端的一个Web应用程序开始,知道客户端与服务器端断开为止.而HttpSession是Servlet中可以使用的 ...

  5. jsp中九大内置对象

    内置组件 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是Htt ...

  6. serlvet 九大内置对象

    隐式对象 说明 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletRes ...

  7. java pages_Java Server Pages 内置对象

    JSP九大内置对象: a.JSP内置对象是Web容器创建的一组对象,[不使用new关键字]就可以使用的内置对象.例如:out b.JSP九大内置对象: 五大常用对象:   out,request,re ...

  8. Servlet的Cookie和HttpSession

    1.会话概述 什么是会话? 如同打电话 会话解决的问题? 保持各个客户端自己的数据 2.Cookie 1.Cookie的定义 2.Cookie的主要方法 注意以下几点 name: 名称不能唯一确定一个 ...

  9. JSP九大内置对象...

    原文地址:http://blog.sina.com.cn/s/blog_6267d71d0100pryr.html JSP九大内置对象: 1.Request, 2.Response,3.Out,4.S ...

  10. jsp中的内置对象(9个)、作用

    jsp内置对象 定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象 客户 ...

最新文章

  1. 年轮蛋糕JOI2014Final
  2. php ob_flush 和flush
  3. 大妈也能看懂的大数据分布式计算
  4. Java类名.方法和变量
  5. 开源串口调试助手java_(串口通信编程) 开源串口调试助手Common (Com Monitor)
  6. python 配置文件解析代码_python3从零学习-5.5.2、configparser — 配置文件解析器
  7. PG基于pgpool-II实现读写分离和负载均衡
  8. 一步一步写算法(之链表逆转)
  9. “5G 时代,手机或被淘汰”
  10. 光凭 5G 根本无法解决宽带问题!
  11. 堆排序时间复杂度_leetcode刷题(二):排序算法(归并排序,堆排序,桶排序)...
  12. class中函数的this指向
  13. android studio for android learning (十五) Camera2界面定制与保存到外部存储
  14. Python 搜狗词库的批量下载
  15. 【综合类型第 16 篇】W3School 离线手册最新版下载
  16. 最牛比的NBIOT芯片MDM9206
  17. ICE for Linux
  18. 数据库——数据库结构设计
  19. Python——文件读写
  20. 自知、自胜、知足、强行,不失其所

热门文章

  1. 数学建模 - 时间序列分析
  2. PROFINET 模拟器使用教程
  3. 浅谈“知识库管理系统”
  4. [牛年第一贴 09.2.1] 51CTO 编辑部的那些事儿
  5. 基于Java+SpringMVC+vue+element实现前后端分离校园失物招领系统详细设计
  6. JavaScript基础视频教程总结(011-020章)
  7. 最速下降法(附Python代码)
  8. 服务器声卡硬件安装,win 2008虚拟声卡的配置
  9. 购物网站的设计与实现论文
  10. iPhone大小的盒子服务器Cubieboard