JavaWeb--快速入门Cookie&Session(二)

简介: JavaWeb--快速入门Cookie&Session(二)

二、Session



2.1 什么是 Session 会话


1、Session就一个接口(HttpSession)


2、Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术


3、每个客户端都有自己的一个 Session会话


4、Session会话中,我们经常用来保存用户登录之后的信息。


2.2 如何创建Session和获取(id号,是否为新)


如何创建和获取Session。它们的API是一样的。


request.getSession()


第一次调用是:创建Session 会话


之后调用都是:获取前面创建好的Session会话对象。


isNew();判断到底是不是刚创建出来的(新的)


true表示刚创建


false表示获取之前创建


每个会话都有一个身份证号。也就是ID值。而且这个ID是唯一的


getld()得到Session 的会话id值。


实例

JSP页面

jsp页面几个实例都是相同的,下面只放关键代码了~


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Session</title>
   <base href="http://localhost:8080/Day09_cookie_session/">
<style type="text/css">
   ul li {
      list-style: none;
   }
</style>
</head>
<body>
   <iframe name="target" width="500" height="500" style="float: left;"></iframe>
   <div style="float: left;">
      <ul>
         <li><a href="sessionServlet?action=createOrGetSession" target="target">Session的创建和获取(id号、是否为新创建)</a></li>
         <li><a href="sessionServlet?action=setAttribute" target="target">Session域数据的存储</a></li>
         <li><a href="sessionServlet?action=getAttribute" target="target">Session域数据的获取</a></li>
         <li>Session的存活</li>
         <li>
            <ul>
               <li><a href="sessionServlet?action=defaultLife" target="target">Session的默认超时及配置</a></li>
               <li><a href="sessionServlet?action=life3" target="target">Session3秒超时销毁</a></li>
               <li><a href="sessionServlet?action=deleteNow" target="target">Session马上销毁</a></li>
            </ul>
         </li>
         <li><a href="" target="target">浏览器和Session绑定的原理</a></li>
      </ul>
   </div>
</body>
</html>


SessionServlet代码


protected void createOrGetSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 创建和获取Session会话对象
    HttpSession session = req.getSession();
    // 判断 当前Session会话,是否是新创建出来的
    boolean isNew = session.isNew();
    // 获取Session会话的唯一标识 id
    String id = session.getId();
    resp.getWriter().write("得到的Session,它的id是:" + id + " <br /> ");
    resp.getWriter().write("这个Session是否是新创建的:" + isNew + " <br /> ");
}


第一次点击是true


image.png


重复点击,Session值没有发生变化


image.png


2.3 Session域数据的存取


image.png

image.png


/**
 * 往Session中保存数据
 * @param req
 * @param resp
 * @throws ServletException
 * @throws IOException
 */
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.getSession().setAttribute("key1", "value1");
    resp.getWriter().write("已经往Session中保存了数据");
}


/**
 * 获取Session域中的数据
 * @param req
 * @param resp
 * @throws ServletException
 * @throws IOException
 */
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Object attribute = req.getSession().getAttribute("key1");
    resp.getWriter().write("从Session中获取出key1的数据是:" + attribute);
}


2.4 Session 生命周期控制


public void setMaxInactiveInterval(int interval)设置Session 的超时时间(以秒为单位〉,超过指定的时长,Session就会被销毁。


值为正数的时候,设定Session的超时时长。


负数表示永不超时


public int getMaxInactivelnterval()获取Session 的超时时间


public void invalidate()让当前Session会话马上超时无效。


Session默认的超时时长是多少?


Session 默认的超时时间长为30分钟。


因为在Tomcat服务器的配置文件web.xml中默认有以下的配置,它就表示配置了当前Tomcat服务器下所有的Session超时配置默认时长为:30分钟。


<session-config>
<session-timeout>30</session-timeout></session-config>


如果你想只修改个别 session的超时时长。就可以使用上面的APlI。

setMaxInactiveInterval(int interval)来进行单独的设置。


session.setMaxInactivelnterval(int interval)单独设置超时时长。


image.png


默认超时时长


protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 获取了Session的默认超时时长
    int maxInactiveInterval = req.getSession().getMaxInactiveInterval();
    resp.getWriter().write("Session的默认超时时长为:" + maxInactiveInterval + " 秒 ");
}


默认的 Session 的超时时长为其他时长。你可以在你自己的 web.xml 配置文件中做 以上相同的配置。就可以修改你的 web 工程所有 Seession 的默认超时时长。


image.png


image.png


设置web工程某个session超时时间
protected void life3(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 先获取Session对象
    HttpSession session = req.getSession();
    // 设置当前Session3秒后超时
    session.setMaxInactiveInterval(3);
    resp.getWriter().write("当前Session已经设置为3秒后超时");
}


image.png


设置session超时时间为3s


我们在创建会发现又是一个新的session



image.png



Session马上超时


image.png



image.png


过程很简单,也很好理解


放个代码


protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 先获取Session对象
    HttpSession session = req.getSession();
    // 让Session会话马上超时
    session.invalidate();
    resp.getWriter().write("Session已经设置为超时(无效)");
}


2.5 浏览器和 Session之间关联的技术内幕


这图画的真好!!!不知道是谁画的呢


image.png

相关文章
|
10月前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
10月前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
10月前
|
Java
Java快速入门之判断与循环
本文介绍了编程中的流程控制语句,主要包括顺序结构、判断结构(if语句和switch语句)以及循环结构(for、while和do...while)。通过这些语句可以精确控制程序的执行流程。if语句有三种格式,分别用于简单条件判断、二选一判断和多条件判断。switch语句适用于有限个离散值的选择判断,而循环结构则用于重复执行某段代码,其中for循环适合已知次数的情况,while循环适合未知次数但有明确结束条件的情况,do...while则是先执行后判断。文中还提供了多个示例和练习,帮助读者理解并掌握这些重要的编程概念。
|
11月前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
270 11
|
12月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
238 4
|
12月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
444 57
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
1214 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
564 1
下一篇
开通oss服务