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:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--

posted on 2025-03-22 14:20  有点懒惰的大青年  阅读(160)  评论(0)    收藏  举报