【Java Web】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就找不到了,就会重新创建。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值