我是靠谱客的博主 耍酷河马,最近开发中收集的这篇文章主要介绍【Java Web】SessionSession会话创建和获取SessionSession域数据的存取Session 生命周期控制浏览器和 Session 之间关联的技术内幕,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Session

  • Session会话
  • 创建和获取Session
    • request.getSession() 创建和获取
    • getId() 得到 Session 的会话 id 值。
    • isNew(); 判断到底是不是刚创建出来的(新的)
  • Session域数据的存取
    • 往Session中保存数据
    • 获取Session域中的数据
  • Session 生命周期控制
    • Session默认时常
      • Session 的超时
  • 浏览器和 Session 之间关联的技术内幕

Session会话

1、 Session 就一个接口(HttpSession) 。
2、 Session 就是会话。 它是用来维护一个客户端和服务器之间关联的一种技术。
3、 每个客户端都有自己的一个 Session 会话。
4、 Session 会话中, 我们经常用来保存用户登录之后的信息。
5、 Session是保存在服务器端的。

创建和获取Session

request.getSession() 创建和获取

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

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

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

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

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

Session域数据的存取

往Session中保存数据

/**
* 往 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域中的数据

/
**
* 获取 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);
}

Session 生命周期控制

  1. public void setMaxInactiveInterval(int interval)
    设置 Session 的超时时间( 以秒为单位) , 超过指定的时长, Session
    就会被销毁。
  • 值为正数的时候, 设定 Session 的超时时长。

  • 负数表示永不超时(极少使用)

    示例:设置3秒后超时

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

获取 Session 的超时时间
3. public void invalidate()
让当前 Session 会话马上超时无效。

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

Session默认时常

  1. Session 默认时常
    Session 默认的超时时间长为 30 分钟。
    因为在 Tomcat 服务器的配置文件 web.xml中默认有以下的配置, 它就表示配置了当前 Tomcat 服务器下所有的 Session
    超时配置默认时长为: 30 分钟。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
  1. 修改web 工程Session默认时长

在自己的web.xml配置文件中 写如下,就改成了20min

<!--表示当前 web 工程。 创建出来 的所有 Session 默认是 20 分钟 超时时长-->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
  1. 修改个别Session的时常
    setMaxInactiveInterval()设置单个的session时长

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

Session 的超时

Session超时指的是客户端两次请求的最大间隔时常。
在这里插入图片描述

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

Session 技术, 底层其实是基于 Cookie 技术来实现的.
就是第一次创建Session会话的时候会创建一个Cookie对象,Cookie的key就是这个Session的id值,传给客户端。
客户端每次请求就会带着这个cookie,然后服务器端通过这个id在服务器内存中查找这个id对应的session。

如果把cookie删了,那这个session就找不到了,就会重新创建。

在这里插入图片描述

最后

以上就是耍酷河马为你收集整理的【Java Web】SessionSession会话创建和获取SessionSession域数据的存取Session 生命周期控制浏览器和 Session 之间关联的技术内幕的全部内容,希望文章能够帮你解决【Java Web】SessionSession会话创建和获取SessionSession域数据的存取Session 生命周期控制浏览器和 Session 之间关联的技术内幕所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部