ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Session技术

2021-12-15 20:31:44  阅读:147  来源: 互联网

标签:Session resp req 技术 会话 session 超时


文章目录

什么是 Session 会话?

  1. Session 就一个接口(HttpSession)。

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

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

  4. Session 会话中,我们经常用来保存用户登录之后的信息。(保存在服务器端)



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

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

request.getSession() 

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

isNew(); 判断到底是不是刚创建出来的(新的)
  true 表示刚创建
  false 表示获取之前创建

每个会话都有一个身份证号。也就是 ID 值。而且这个 ID 是唯一的。
getId(); 得到 Session 的会话 id 值。


servlet代码:

protected void createOrGetSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建和获取session对象
        HttpSession session = req.getSession();
        //判断当前session对话是否是新创建出来的
        boolean aNew = session.isNew();
        //获取session会话的唯一标识id
        String id = session.getId();

        resp.getWriter().write("得到的session他的ID是:"+id+"\n");
        resp.getWriter().write("这个session是否是新创建的:"+aNew+"\n");

    }


Session 域数据的存取

servlet代码:

存数据:key1:value1

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

取数据:

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


Session 生命周期控制

public void setMaxInactiveInterval(int interval) 

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

  • 值为正数的时候,设定 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秒后超时");
    }

public int getMaxInactiveInterval() //获取 Session 的超时时间

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

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

 protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //先获取session对象
        HttpSession session=req.getSession();
        //让session会话马上超时
        session.invalidate();

        resp.getWriter().write("session已经设置为超时");
    }

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

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

<session-config> 

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

</session-config>

如果说。你希望你的 web 工程,默认的 Session 的超时时长为其他时长。你可以在你自己的 web.xml 配置文件中做
以上相同的配置。就可以修改你的 web 工程所有 Seession 的默认超时时长。
如果你想只修改个别 Session 的超时时长。就可以使用上面的 API。setMaxInactiveInterval(int interval)来进行单独的设置。
session.setMaxInactiveInterval(int interval)单独设置超时时长。



Session 超时的概念介绍:

设置session的存活时间为3秒,假设此时创建了一个session,三秒内使用req.getSession()获取session,然后使用session.isNew()判断session是否为新创建的,此时返回false,如果三秒后再使用req.getSession()获取session,然后使用session.isNew()判断,则为true

在这里插入图片描述



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

Session 技术,底层其实是基于 Cookie 技术来实现的。

在这里插入图片描述

标签:Session,resp,req,技术,会话,session,超时
来源: https://blog.csdn.net/weixin_45102820/article/details/121960598

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有