我想根据登录用户设置cookie。因此,当用户x登录时,他可以看到他输入的姓名,如果用户y登录,他会看到他之前输入的姓名。我该怎么办?因为现在,登录的最新用户是cookie的值。
我验证我的用户是这样的:
public class LoginService {
public boolean verifyLogin(User user){
if(user.getUserId().equals("userId") && user.getPassword().equals("password")){
return true;
}
if(user.getUserId().equals("random") && user.getPassword().equals("a")){
return true;
}
return false;
}
}
这就是我在LoginAction
中设置Cookie的方式:
public Set<Cookie> getCookies(){
Set<Cookie> cookies = new HashSet<>();
Cookie userId = new Cookie("userId", user.getUserId() );
userId.setMaxAge(60*60*24*365); // Make the cookie last a year!
userId.setPath("/"); //Make it at root.
cookies.add(userId);}
这就是我在FormAction
中设置Cookie的方式:
public Set<Cookie> getCookies(){
Set<Cookie> cookies = new HashSet<>();
Cookie name = new Cookie("name", userInfo.getName() );
name.setMaxAge(60*60*24*365); // Make the cookie last a year!
name.setPath("/"); //Make it at root.
cookies.add(name); }
答案 0 :(得分:1)
您应该为已经过验证的用户保存Cookie。如果首先验证用户,则将其保存到会话中。然后使用会话用户提供cookie。像这样,
if (verifyLogin(User user))
session.put("user", user);
首先要保存cookie,请从会话中获取用户
public Set<Cookie> getCookies(){
Set<Cookie> cookies = new HashSet<>();
User user = (User) session.get("user");
if (user != null){
Cookie userId = new Cookie("userId", user.getUserId() );
userId.setMaxAge(60*60*24*365); // Make the cookie last a year!
userId.setPath("/"); //Make it at root.
cookies.add(userId);
}
return cookies;
}
要访问会话映射,您可以使用SessionAware
界面。另一种方法是从动作上下文中获取会话。
请注意,浏览器会共享Cookie。如果您在使用不同用户同时使用相同的浏览器时,它将使用相同的cookie,除非您提供每个会话cookie实现。