JavaWeb之session

本文深入解析了session机制,探讨了session如何存储用户会话信息,并详细介绍了session的存取方法及清除方式。通过示例代码展示了如何在服务器端创建、读取和删除session,帮助读者理解session的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

session概述

什么是session?

session称为会话控制。session对象存储特定用户会话所需的属性及配置信息。

有什么特点

  • 是以键值对的形式存储数据
  • 每个session都有自己的存活时间(默认是30分钟)
  • 每一个session的JSESSIONID是不同的

session的原理

session原理
浏览器第一次访问服务器时,服务器会查看Cookie中是否有sessionID,若有则获取,若没有就会创建一个sessionid保存在cookie中。

session存取数据

setAttribute(String key,Object value);
getAttribute(String key);
往session中存值

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建一个session,浏览器第一层次访问时,会新建,下次访问时,会查看sessionID
        HttpSession session = request.getSession();

        //获取sessionid
        String sessionId = session.getId();
        //将值存入session中
        session.setAttribute("jack","rose");

    }

向session中获取值

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建session对象
        HttpSession session = request.getSession();
        //通过key获取到session数据
        String attribute = (String) session.getAttribute("jack");

        System.out.println(attribute);
    }

清除session

session.invalidate() 清除session

### JavaWebSession 的使用方法 #### 创建并操作 Session 对象 当客户端首次请求 Web 应用程序时,服务器会创建一个新的 `HttpSession` 实例。可以通过 `HttpServletRequest.getSession()` 方法来获取当前用户的 session 对象。 如果希望强制创建新的 session,则可以调用带参数的方法: ```java // 获取已有的session,如果没有则新建一个 HttpSession session = request.getSession(); // 或者 // 只有在没有现有session的情况下才会创建新session HttpSession newSession = request.getSession(true); ``` 一旦获得了 session 对象之后就可以向其中存储数据了[^1]。 #### 存储和检索属性 为了保存用户特定的信息,在 session 中设置键值对形式的数据非常方便。下面是一个简单的例子展示如何存取这些信息: ```java // 设置名为"user"的属性 session.setAttribute("user", "John Doe"); // 读取名为"user"的属性 String userName = (String) session.getAttribute("user"); if(userName != null){ out.println("Welcome back, " + userName); } ``` 需要注意的是,这里使用的类型转换是因为 getAttribute() 返回 Object 类型的对象[^3]。 #### 跨 Servlet 访问同一 Session 数据 由于同一个浏览器实例下的所有请求共享相同的 session ID,因此可以在不同 servlet 之间传递 session 数据而无需额外处理。只需按照上述方式通过 getSession() 来获得相同 session 即可。 #### 销毁 Session 有两种主要的方式可以让 session 失效:一种是由应用程序显式地结束它;另一种则是依赖于配置好的超时期限自动过期。 - **手动销毁** 要立即终止某个 session 并清除其关联的所有状态信息,可以直接调用 invalidate(): ```java session.invalidate(); // 结束此 HttpSession,并使任何绑定于此对象上的监听器失效 ``` - **自动销毁** 还可以设定最大不活动间隔时间(单位秒),超过该时间段未收到来自客户端的新请求就会认为 session 已经不再活跃从而将其删除: ```java session.setMaxInactiveInterval(60 * 30); // 设定为半小时内无交互即关闭 ``` 此外,默认情况下 Tomcat 容器也会定期扫描所有存活中的 sessions 查找那些已经超过了指定的最大空闲时限但仍处于打开状态的情况,并对其进行清理工作[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值