session介绍
1.session介绍
Session是一种在Web应用程序中用于存储和管理用户数据的机制。它主要涉及到以下流程:
1.客户端向服务器发送请求。
2.服务器在接收到客户端请求之后,会为该会话生成一个唯一的sessionid,并将该sessionid存储在一个cookie中,然后将该cookie发送给客户端。
3.客户端在接收到服务器发送的response后,会自动保存该cookie,并在后续的请求中将该cookie包含在请求头中。
4.服务器在接收到客户端发送的后续请求时,会自动从请求头中提取sessionid,并使用该sessionid来查找该客户端的会话。
5.如果服务器找到了该会话,则会将该会话中存储的数据发送回客户端,以便客户端可以使用这些数据来执行操作。
6.如果服务器没有找到该会话,则会创建一个新的会话,并将该会话的sessionid存储在一个cookie中,然后将该cookie发送回客户端。
7.在客户端结束会话(例如关闭浏览器)时,浏览器会自动删除该cookie,从而结束该会话。
总的来说,Session的流程就是服务器生成一个唯一的sessionid,并将其存储在客户端的cookie中,以便服务器能够识别客户端的会话。服务器使用该sessionid来查找该客户端的会话,并使用该会话来存储和管理用户数据。客户端通过在请求头中包含该cookie来与服务器交互,并在会话结束时自动删除该cookie。
2.为何sessionId不一致问题
参考博客:https://blog.csdn.net/LA1245780/article/details/143510016
在Java Web开发中,Session ID是用来标识用户会话的唯一标识符。通常情况下,Session ID在用户第一次访问网站时生成,并在随后的请求中保持不变,直到会话过期或被显式地使无效。然而,在某些情况下,你可能会遇到Session ID不断变化的问题。这通常是由于以下原因:
1.每次请求都创建新的会话:如果每次请求都调用HttpServletRequest.getSession(true),则会创建一个新的会话,并分配一个新的Session ID。
2.会话超时:如果会话超时,服务器可能会创建一个新的会话,并分配一个新的Session ID。
3.浏览器禁用了Cookies:如果客户端浏览器禁用了Cookies,那么服务器将无法跟踪会话,因此每次请求都会创建一个新的会话。
4.负载均衡器问题:在使用负载均衡器的环境中,如果会话没有正确配置为粘性会话(Sticky Session),则每个请求可能被路由到不同的服务器,导致会话ID变化。
例1:在代码中设置会话超时时间
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
HttpSession session = request.getSession();
session.setMaxInactiveInterval(1800); // 设置会话超时时间为30分钟(1800秒)
response.getWriter().println("Session ID: " + session.getId());
}
}
参考百度AI:

--
浙公网安备 33010602011771号