1.HttpSession常用方法
是在Java Servlet中用来管理会话状态的重要接口,它提供了一种在多个请求或页面之间存储用户特定信息的方式。以下是一些 HttpSession 常用的方法和用法:
获取会话对象:
HttpSession session = request.getSession();
这会返回当前请求的会话对象。如果客户端之前没有会话,这个方法会创建一个新的会话对象;如果已经有会话,则返回现有的会话对象。
设置和获取会话属性:
// 设置属性
session.setAttribute("username", "john_doe");// 获取属性
String username = (String) session.getAttribute("username");
通过 setAttribute 方法可以将任意类型的对象存储到会话中,通过 getAttribute 方法可以获取之前存储在会话中的对象。
获取会话ID:
// 设置属性
session.setAttribute("username", "john_doe");// 获取属性
String username = (String) session.getAttribute("username");
(1)getId() 方法
返回当前会话的唯一标识符,通常是一个字符串。
判断会话是否新建:
boolean isNew = session.isNew();
(2)isNew() 方法
返回一个布尔值,表示当前会话是否是新创建的。如果是新会话,返回 true;否则返回 false。
设置会话过期时间:
// 设置会话过期时间为30分钟(单位是秒)
session.setMaxInactiveInterval(1800);
setMaxInactiveInterval 方法设置会话的最大非活动时间间隔,即在用户没有活动(没有请求)的情况下会话保持活跃的时间。在超过该时间后,会话将被销毁。
销毁会话:
java
session.invalidate();
invalidate() 方法用于销毁当前会话。一旦会话被销毁,会话中存储的所有属性和数据都将被清除。
获取会话创建时间:
java
long creationTime = session.getCreationTime();
getCreationTime() 方法返回会话的创建时间,以毫秒数表示,即从1970年1月1日0时0分0秒(GMT时间)至会话创建时的毫秒数。
获取最后访问时间:
java
long lastAccessedTime = session.getLastAccessedTime();
getLastAccessedTime() 方法返回会话的最后访问时间,以毫秒数表示,即上次客户端请求时的时间。
这些方法和用法使得开发者可以方便地管理用户的会话状态,存储用户相关的数据,并在需要时执行特定的会话管理操作。
2.session.isNew()
Java Servlet API 中的一个方法,用于判断当前会话(session)是否是新创建的。
在Java Web应用程序中,会话是指客户端(通常是浏览器)与服务器之间一段特定的交互时间,用于跟踪用户的状态和数据。当客户端第一次访问服务器时,会话可能会被创建,这时候 session.isNew() 方法会返回 true。一旦会话已经存在,并且客户端与服务器之间有交互,即使是重新访问页面,该方法也会返回 false。
典型的用法是在Servlet中使用该方法来判断当前请求是否是新会话,从而执行相应的逻辑或初始化工作。
例如,可以这样使用:
java
HttpSession session = request.getSession();
if (session.isNew()) {// 如果是新会话,执行某些初始化操作// 例如设置初始值、记录日志等
} else {// 如果不是新会话,执行其他操作// 例如读取会话中的数据、更新状态等
}
这种方法对于管理用户状态和个性化内容非常有用,因为可以根据会话是否新建来执行不同的逻辑处理。
3.session.getId()
HttpSession 接口中的一个方法,用于获取当前会话的唯一标识符(Session ID)。每个会话在创建时都会被分配一个唯一的标识符,用于标识该会话,通常以字符串形式返回。
在使用 getId() 方法时,可以获取当前会话的唯一标识符,并用于各种会话管理和数据存储操作中。例如,可以将该标识符用于日志记录、跟踪用户活动、或者与其他系统(如数据库)进行关联以识别特定会话。
示例用法如下:
java
HttpSession session = request.getSession();
String sessionId = session.getId();
System.out.println("Session ID: " + sessionId);
此代码段中,通过 session.getId() 获取了当前会话的标识符,并将其打印输出。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet(value = "/testSession")
public class TestSession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session=req.getSession();System.out.println(session.getId());System.out.println(session.isNew());}
}
操作:Tomcat自动打开浏览器,复制网址,重新开浏览器
原因:Tomcat启动时会先创造session(会话),所以一直是false
执行结果:
4.invalidate()
HttpSession 接口中的一个方法,用于销毁当前会话。调用 invalidate() 方法将会导致当前会话及其所有关联的数据(即会话属性)被立即销毁并移除。
在使用 invalidate() 方法时,会话对象和其关联的数据将被清除,这包括通过 setAttribute() 方法设置的所有会话属性。通常情况下,调用 invalidate() 是为了确保在用户注销或会话超时时清除会话数据,从而释放资源并保持系统的安全性和一致性。
示例用法如下:
HttpSession session = request.getSession();
session.invalidate();
在这个示例中,通过 request.getSession() 获取当前会话对象,然后调用 invalidate() 方法来销毁该会话。一旦会话被销毁,后续对 session 对象的任何操作都将无效,并且之前存储在会话中的数据将不再可用。
需要注意的是,调用 invalidate() 并不会立即将会话从内存中删除,而是在当前请求结束后才会真正执行销毁操作。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet(value = "/testSession")
public class TestSession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session=req.getSession();System.out.println(session.getMaxInactiveInterval());System.out.println(session.getCreationTime());System.out.println(session.getLastAccessedTime());}
}