春季会议管理如何工作?

时间:2018-08-17 09:37:51

标签: http session session-management

我真的不明白这个概念。 看看我有什么:

@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。当用户浏览网站时,我怎么知道它是同一用户?

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

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

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

还是有一种方法可以完全不使用哈希图?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

想通了。

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

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