如何利用Cookie实现用户的自动登录:
功能展示:
点击我的账号未登录需要先登录
登录后:
重启服务器:点击我的账号直接进入不需要登录
实现过程:
我的账号:
//我的账户
@RequestMapping("/myAccount")
public String myAccount(HttpSession session,HttpServletRequest request){
//先从session中获取login_user,只有成功登录之后session中才会有信息
User login_user = (User) session.getAttribute("login_user");
if (login_user == null){ //如果为null进登录页面
//自动登录能否成功,调用自动登录方法
login_user = autologin(request);
if (login_user != null){ //如果自动登录成功,返回的login_user就不为空
//自动登录成功,把登录用户信息放到session
session.setAttribute("login_user",login_user);
return "/client/myAccount.jsp";
}
return "/client/login.jsp";
}else {
return "/client/myAccount.jsp"; //不为null进入我的账户页面
}
}
用户登录:
//用户登录
@RequestMapping("/login")
public String login(User user, String remember,String autologin, HttpServletRequest request, HttpServletResponse response, HttpSession session){
//System.out.println(remember);
//查询用户名和密码是否存在
User login_user = userService.findUserByLogin(user);
if (login_user != null){//如果用户名和密码正确
if (login_user.getState() == 1){
if ("1".equals(autologin)){
//记住账号和密码保存到
addCookie(autologin,user,request,response);
}
else if ("1".equals(remember)){
//记住用户名,把用户名保存到cookie
addCookie(autologin,user,request,response);
}
session.setAttribute("login_user",login_user);
return "/client/myAccount.jsp";
}else {//用户未激活
request.setAttribute("login_error","用户未激活,请激活后使用!");
return "/client/login.jsp";
}
}else {
request.setAttribute("login_error","用户名或密码错误.请重新登录!");
return "/client/login.jsp";
}
}
用户退出:
//用户退出
@RequestMapping("/logout")
public String logout(HttpSession session, Model model,HttpServletRequest request,HttpServletResponse response){
//从session中移除登录用户信息
session.removeAttribute("login_user");
//从cookie中移除保存的用户名
Cookie cookie1 = new Cookie("bookstore_username",null);
cookie1.setMaxAge(0);
cookie1.setPath(request.getContextPath()+"/");
response.addCookie(cookie1);
//从cookie中移除保存的密码
Cookie cookie2 = new Cookie("bookstore_password",null);
cookie2.setMaxAge(0);
cookie2.setPath(request.getContextPath()+"/");
response.addCookie(cookie2);
model.addAttribute("login_error","用户退出成功,请重新登录!");
return "/client/login.jsp";
}
添加Cookie:
private void addCookie(String autologin, User user, HttpServletRequest request, HttpServletResponse response) {
//定义cookie对象
Cookie cookie = new Cookie("bookstore_username",user.getUsername());
//保存时间为3天
cookie.setMaxAge(60*60*24*3);
//cookie的作用路径,当前项目下
cookie.setPath(request.getContextPath()+"/");
//把定义好的cookie响应回客户端
response.addCookie(cookie);
if ("1".equals(autologin)){ //定义cookie对象,记住密码到cookie
Cookie cookie2 = new Cookie("bookstore_password",user.getPassword());
//保存时间为3天
cookie2.setMaxAge(60*60*24*3);
//cookie的作用路径,当前项目下
cookie2.setPath(request.getContextPath()+"/");
response.addCookie(cookie2);
}
}
自动登录:
//自动登录的判断
private User autologin(HttpServletRequest request) {
//定义用户名和密码先为null
String username = null;
String password = null;
//获取全部的cookie信息保存到数据cookies中
Cookie[] cookies = request.getCookies();
for (Cookie cookie:cookies){ //循环cookies的数据
//对比找到cookies中保存bookstore_username的名字
if ("bookstore_username".equals(cookie.getName())){
//把对应的bookstore_username的cookie值赋值给上边定义的username
username = cookie.getValue();
}
//对比找到cookies中保存bookstore_password的名字
if ("bookstore_password".equals(cookie.getName())){
//把对应的bookstore_password的cookie值赋值给上边定义的password
password = cookie.getValue();
}
}
System.out.println("username="+username);
System.out.println("password="+password);
//定义一个user对象作为返回值
User user = new User();
//把从cookie中获取的username和password保存到user对象的属性中
user.setUsername(username);
user.setPassword(password);
System.out.println("1122"+user);
//根据cookie中获取到的用户名和密码去查询数据库,把查询到的结果返回
user =userService.findUserByLogin(user);
System.out.println("2233"+user);
return user;
}