📜  JSP 会话——隐式对象(1)

📅  最后修改于: 2023-12-03 15:32:25.713000             🧑  作者: Mango

JSP 会话 — 隐式对象

JSP 是在服务器端执行的 Java Servlet,它可以生成 HTML 页面,它会把 Servlet 的所有内置对象都包含进来,而这些内置对象又被称作隐式对象。其中一个非常重要的内置对象就是 会话(session)。在 JSP 页面中,可以使用隐式对象 session 来管理会话。

什么是会话?

一个 Web 应用程序需要跟踪用户登录信息和其他一些状态 —— 例如购物车、浏览器历史记录、最近的搜索项等等。会话就是解决这些问题的一种技术。

会话可以看作是一种服务器到客户端数据的存储方式,在客户端保持了一个会话 ID。当用户访问浏览器上的 Web 应用时,应用可能会在服务器端为该用户创建一个会话,并将会话 ID 发送到客户端,然后由客户端存储。

这样,当用户再次访问该应用时,客户端会将会话 ID 发到服务器端,服务器会查找并加载之前的会话。通过此种方式可以在 Web 应用程序的操作之间跟踪用户状态和信息。

使用会话对象

在 JSP 中,可以使用隐式对象 session 来管理会话。session 对象可以用来储存和获取数据,用于在浏览器和服务器之间跟踪客户端状态,类似于 cookie,但是存储在服务器端,相对更安全。

下面的代码会在会话中存储一个名为 name 的属性:

<%
    // 取得 session 对象
    HttpSession session = request.getSession();

    // 将属性存储在 session 中
    session.setAttribute("name", "Jack");
%>

通过以下代码,可以从 session 中获取名为 name 的属性:

<%
    // 取得 session 对象
    HttpSession session = request.getSession();

    // 获取 session 中存储的属性
    String name = (String) session.getAttribute("name");
%>

以上代码将把值 “Jack” 存储在 name 属性中。在随后的页面访问中,可以通过相同的方式从 session 对象中获取和更新属性。除了 setAttribute()getAttribute() 方法,还有很多其他的方法可以用于管理会话。例如,以下方法用于获取会话 ID:

<%
    // 取得 session 对象
    HttpSession session = request.getSession();

    // 获取会话 ID
    String sessionId = session.getId();
%>
会话超时

默认情况下,Session 对象的有效期为 30 分钟。如果在此期间用户没有任何交互,那么会话将自动失效并被销毁。当会话失效时,所有与之相关的属性都会被删除。可以通过以下代码修改默认的会话超时时间:

<%
    // 取得 session 对象
    HttpSession session = request.getSession();

    // 设置会话超时为 60 分钟
    session.setMaxInactiveInterval(60 * 60); // 单位为秒
%>
总结

通过使用隐式对象 session,可以创建和管理会话,从而在应用程序和客户端之间跟踪用户状态和信息。在 JSP 中使用 session 对象非常方便,因为不需要手动管理会话 ID 和状态,所有这些都由 JSP 引擎自动处理。