Session-session的创建和获取、生命周期的修改

1、Session简介

  1. 什么是session
    session是javaEE下面的一个HttpSession接口,它可以实现一次会话的多次请求之间共享数据。比如请求的转发里面共享的request域,就是在一次请求之间共享数据。session就是在一次会话之间共享数据,还有一个比较大的域对象,叫application,它是在一个应用里面共享数据。

  2. session与cookie的区别
    1、session与cookie都是存储用户数据的功能,他们都是一个对象。但是cookie是存储在浏览器里的,而session是存储在服务器里面。
    2、存储数据大小不同,session没有任何大小限制,而cookie好像最多只能存储4KB。
    3、安全性不同:session存储在服务器,相当于比较安全,而cookie在浏览器随时能够查看,你的登录信息很可能被别人盗走,所以不怎么安全。

2、session的创建和获取

session比较特殊,它的创建和获取都是用req.getSession();如果服务器已经有对应的session,那就直接通过请求头向服务器发送session的ID,可以利用session的ID获取。如果服务器没有session就新建一个,然后将session的ID响应给浏览器。
在这里插入图片描述

@WebServlet("/session001")
public class SessionDemo001 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.修改编码方式
        resp.setContentType("text/html;charset=utf-8");
        //2.创建session
        HttpSession session = req.getSession();
        //3.判断session是否为刚创建的
        if(session.isNew()){
            resp.getWriter().write("这个session是刚创建的!!!");
        }else{
            resp.getWriter().write("这个session不是刚创建的!!!");
        }
        //4.获取sessionID
        String id = session.getId();
        resp.getWriter().write("<br/>session的ID是:"+id);
    }
}

第一次请求,新建session
在这里插入图片描述
第二次请求:ID完全一样
在这里插入图片描述

3、创建和获取session域数据(方法和request域大致一样)

1、创建session域数据

@WebServlet("/session002")
public class SessionDemo002 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session = req.getSession();

        session.setAttribute("key1","value1");
        session.setAttribute("key2","value2");
        session.setAttribute("key3","value3");
        session.setAttribute("key4","value4");

        resp.getWriter().write("session数据创建好了!!!");
    }
}

在这里插入图片描述

2、获取session域数据

@WebServlet("/session003")
public class SessionDemo003 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        HttpSession session = req.getSession();
        Object key1 = session.getAttribute("key1");
        Object key2 = session.getAttribute("key2");
        Object key3 = session.getAttribute("key3");
        Object key4 = session.getAttribute("key4");
        resp.getWriter().write("session数据获取了"+"<br/>");
        resp.getWriter().write("以下是Session程序2中的session域数据<br/>"+key1+"<br/>"+key2+"<br/>"+key3+"<br/>"+key4);
    }
}

在这里插入图片描述

4、修改session超时时长

什么是超时时长:就是在浏览器连续两次请求之间的最大允许时间,超过这个时间session就会被销毁。
session可以保存在服务器,但不是永久保存的。如果永久保存服务器将会浪费大量资源。session有一个默认的超时属性,这个属性可以在Tomcat服务器下面的配置文件查看。
tomcat\工程\conf\web.xml查看。这里的30是默认的30分钟。
Session的钝化:web服务器关闭后,服务器会将session写入磁盘文件之中。
session的活化:在重新启动服务器时,从文件之中加载数据到session中。
在这里插入图片描述
获取session超时时长:getMaxInactiveInterval();

@WebServlet("/session004")
public class SessionDemo004 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session = req.getSession();
        int maxInactiveInterval = session.getMaxInactiveInterval();

        resp.getWriter().write("默认的session超时时长是:"+maxInactiveInterval+"秒");
    }
}

在这里插入图片描述
2.修改超时时长

@WebServlet("/session005")
public class SessionDemo005 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session = req.getSession();
        session.setMaxInactiveInterval(10);
        resp.getWriter().write("session超时时长已经修改!!!");
    }
}

在这里插入图片描述

5、html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <base href="http://localhost:8700/cookie_war_exploded/">
</head>
<body>
<iframe name="target" width="500px" height="500px"></iframe>
<label>
    <li><a href="session001" target="target">创建和获取session</a></li>
    <li><a href="session002" target="target">新建session域数据</a></li>
    <li><a href="session003" target="target">获取session域数据</a></li>
    <li><a href="session004" target="target">获取session超时时长</a></li>
    <li><a href="session005" target="target">修改session超时时长</a></li>
</label>
</body>
</html>

在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我没得冰阔落.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值