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

相关文章
|
1天前
|
Oracle IDE Java
JAVA快速入门基础指南
Java 是一种强大的、面向对象的编程语言,广泛用于开发企业级应用、Android应用、服务器端应用等。
7 0
|
2天前
|
存储 安全 Java
JavaWeb中的Session和Cookie
本文介绍了JavaWeb中的会话跟踪技术,主要讨论了Cookie和Session的概念、用途、设置与获取方法以及生命周期。Cookie是客户端技术,用于在用户浏览器中存储信息,通常用于保持用户登录状态,有效期可设置。Session则保存在服务器端,用于跟踪用户状态,例如登录信息,生命周期可通过设置最大不活动时间控制。两者之间的主要区别在于数据存储位置和安全性,Cookie数据在客户端,可能存在安全风险,而Session数据在服务器端,相对较安全但会占用服务器资源。
|
6天前
|
存储 搜索推荐 安全
【Cookie和Session辨析】
【Cookie和Session辨析】
10 2
|
12天前
|
存储 缓存 安全
【PHP开发专栏】PHP Cookie与Session管理
【4月更文挑战第30天】本文介绍了PHP中的Cookie和Session管理。Cookie是服务器发送至客户端的数据,用于维持会话状态,可使用`setcookie()`设置和`$_COOKIE`访问。Session数据存于服务器,更安全且能存储更多数据,通过`session_start()`启动,`$_SESSION`数组操作。根据需求选择Cookie(跨会话共享)或Session(单会话存储)。实战中常组合使用,如Cookie记住登录状态,Session处理购物车。理解两者原理和应用场景能提升Web开发技能。
|
15天前
|
存储 安全 前端开发
禁用Cookie后Session还能用吗?
禁用Cookie后Session还能用吗?
24 1
|
15天前
|
Java
Cookie和Session
Cookie和Session
19 0
|
24天前
|
Java 测试技术 索引
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
【4月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 1
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
|
27天前
|
存储 JSON 安全
|
2月前
|
存储 自然语言处理 API
Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
24 1
|
3月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
41 0