spring 中的会话管理是如何工作的?

How does session managment work in spring?

这个概念我实在看不懂。 看看我有什么:

@PostMapping("/login")
public ModelAndView login( @ModelAttribute UserLoginDTO userDto, HttpSession session) {
    if (authenticateService.loginCheck(userDto.getUsername(), userDto.getPassword())) {
        session.setAttribute("sessionid",123);
        return new ModelAndView("redirect:/profile");
    } else {
        return new ModelAndView("signin","error","Invalid username or password combination, or the user does not exist.");
    }
}

我已经为会话设置了一个sessionID。当用户浏览网站时,我怎么知道是同一个用户?

我是否必须将服务器端的 sessionID 存储在 ConcurrentHashMap 中? 当有页面切换时我应该这样做吗?

if (conHashMap[...] == session.getId()) {...}
else //redirect to login page 

同样在注销时,我是否只是从哈希图中删除元素并调用 session.invalidate()?

或者是否有一种完全不使用 hashmap 的方法?

如果 ID 相同,您就知道会话来自同一用户,是的。 您最终可以在会话中存储信息。或者,您可以创建会话作用域的 bean:

@Component
@Scope(value="session")
public class MyComponent {
    // ...
}

您将存储在此类对象中的所有内容只能由一个用户访问。

想通了。

失效后,浏览器将以新的会话访问该站点。新会话不会绑定 "sessionid" 属性。这样,我就可以确定哪个会话是有效的,而无需使用哈希图。

if (session.getAttribute("sessionid")==null){
        return new ModelAndView("signin","error","Session expired, please log in again.");