我们经常会遇到这样一个问题:

在写前端登陆的代码时,登陆会有自动登陆的功能。

session_level_memory_consumption 怎么看_自动登陆


如图所示,这是一个简单的登陆页面,其中包含了一个自动登陆功能,这个功能其实很好做。

1.这个功能可以靠cookie实现

判断如果用户勾选了自动登陆,就将用户信息保存在cookie中,那么每次跳转登陆页面前,做一下判断,如果cookie中的值和数据库中的值时一致的,就直接跳转到其他内容。这个话题不是本次讨论内容,不过后期会加上去的。

  • 2019.07.25 添加内容:
    cookie可以借助一个好用的插件,jQuery的cookie插件!
    cdn链接为:
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

用法:

  1. 塞值:直接$.cookie(key,value) 例如,$.("user","zhangsan")
  2. session_level_memory_consumption 怎么看_自动登陆_02


  3. 取值:$.cookie(key) 例如,$.cookie("user")的值为zhangsan
  4. session_level_memory_consumption 怎么看_自动登陆_03


2. 通过session实现

cookie和session:

简单的说,session时存在于服务器端的,cookie时存在于浏览器端的。cookie的存放时间可人为调整。

session用法

session的实现,其实可cookie差不多,但是我在这里没有去拿数据库的内容和session作比较,因为我的判断方式稍微不同。

  1. 通过controller层的方法进入到登陆页面:
@RequestMapping("/login")
public String in(HttpSession session){
    Object username = session.getAttribute("username");
    Object password = session.getAttribute("password");
    System.out.println("session++++++++++"+username+password);
    if (username != null && password != null){
        return "redirect:list";
    }else {
        return "login";
    }
}

其中

Object username = session.getAttribute("username");
Object password = session.getAttribute("password");

这两句话时获取session中的账户密码,当然,在初次登陆的时候,我们session中并没有存放。所以直接走return "login";到登陆页面;
我并没有抽取数据库中的数据做对比,是因为我在接下来添加session的时候,先判断了用户在点击登陆的时候,账户密码是否正确,如果正确接着判断:用户是否勾选了“自动登陆”,如果时,那么将账户密码信息保存在session中,这样就做到了不比对数据库,只判断空不空就能使安全自动登陆的功能,代码如下:
2. 点击登陆后执行的controller方法:

@RequestMapping("/loginUser.action")
@ResponseBody
public String login(User user,boolean rememberMe,HttpSession session) {
    System.out.println(user);
    System.out.println("rememberMe:"+rememberMe);
    boolean result = userService.confirm(user);
    System.out.println(result);
    if (result) {
        System.out.println("账号密码正确!");
        if (rememberMe) {
            session.setAttribute("username",user.getUserName());
            session.setAttribute("password",user.getPassword());
        }
        return "success";
    } else {
        System.err.println("账号密码错误!!!!");
        return "error";
    }
}

这个方法的使使用了jason传输了字符串,返回给前端的ajax。
首先前端将账户密码框、勾选框的信息传送过来,然后验证账户密码信息,接着做判断,根据2中分析的情况决定是否给session赋值,然后告诉前台是否放行
3. 注意内容是:session的用法:
在方法中加入参数:HttpSession session session赋值:session.setAttribute("username",user.getUserName()); session取值:session.getAttribute("username");