我真的不明白这个概念。 看看我有什么:
@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()?
还是有一种方法可以完全不使用哈希图?
答案 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.");