用Cookie做一个记住账号密码的功能

前言:

            使用cookie之前,可先理解session的概念,区分session和cookie的区别和联系。


一、Session的概念

Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。

一般情况下,服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。当然,也有使用数据库将这个Session序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据 库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。


二、cookie与session的区别

(1)cookie数据保存在客户端,session数据保存在服务器端。

(2)Cookies是属于Session对象的一种。

(3)Cookies不会占服务器资源,是存在客服端内存或者一个cookie的文本文件中;而“Session”则会占用服务器资源。

(4)cookie是不可靠的,session是可靠地,但是目前很多著名的站点也都以来cookie。


注:以上摘抄于‘del假行僧’的“浅谈Session与Cookie的区别与联系”  https://blog.csdn.net/duan1078774504/article/details/51912868


三、项目实施过程客户需求添加一个记住账号密码的功能实现

思路:

(1)前端首先获取Cookie中的账号、密码、记住账号密码的状态,做回显所用。

(2)前端传参(账号、密码、记住账号密码的状态)到后台,我的实现是把参数传到验证二维码的后台方法里面进行处理。

(3)后台处理业务,判断记住账号密码的状态-->是则创建账号、密码、记住账号密码的状态Cookie对象,设置Cookie的有效期,保存Cookie;否则遍历Cookies的所有对象,找到账号、密码、记住账号密码的状态对应的Cookie,把值赋为null,保存。这样子处理,不用Cookie的存储路径。-->完事。

代码:

(1)前端:

获取Cookie中的账号、密码、记住账号密码的状态,实现回显。

<%
    String username = "";
    String password = "";
    String isLogin = "";

    //获取当前站点的所有Cookie
    javax.servlet.http.Cookie[] cookies = request.getCookies();
    if(cookies){
    for (int i = 0; i < cookies.length; i++) {//cookies中的数据进行遍历,找到用户名、密码的数据
        if ("username".equals(cookies[i].getName())) {
            username = cookies[i].getValue();
        } else if ("password".equals(cookies[i].getName())) {
            password = cookies[i].getValue();
        }else if ("isLogin".equals(cookies[i].getName())) {
            isLogin = cookies[i].getValue();
        }
    }
    }
%>

记住账号密码用EL表达式做回显

type="checkbox" id="isLogin" ${isLogin?checked="checked":''} name="isLogin">style="color:#3162af;font-size: 12px">记住账号密码

跳转后台

$.post("${g.createLink(controller:"login",action: "isCheckImgCode")}",{imgCode:$("#j_captchaResponse").val(),name:$("#username").val(),pwd:$("#password").val(),isLogin:document.getElementById("isLogin").checked},function(_json){

后台处理

def isCheckImgCode={
    //记住账号密码
    String name = params.name;
    String pwd = params.pwd;
    String flag = params.isLogin;
    if (flag=='true') {
        //创建Cookie对象
        Cookie nameCookie = new Cookie("username", name);
        //设置Cookie的有效期为30        nameCookie.setMaxAge(60 * 60 * 24 * 30);
        Cookie pwdCookie = new Cookie("password", pwd);
        pwdCookie.setMaxAge(60 * 60 * 24 * 30);
        Cookie isLoginCookie = new Cookie("isLogin", flag);
        isLoginCookie.setMaxAge(60 * 60 * 24 * 30);
        response.addCookie(nameCookie);
        response.addCookie(pwdCookie);
        response.addCookie(isLoginCookie);
    }else{
        //获取当前站点的所有Cookie
             Cookie[] cookies = request.getCookies();
             for (int i = 0; i < cookies.length; i++) {//cookies中的数据进行遍历,找到用户名、密码的数据
                     if ("username".equals(cookies[i].getName())) {
                         cookies[i].value=null;
                         response.addCookie(cookies[i]);

                     } else if ("password".equals(cookies[i].getName())) {
                         cookies[i].value=null;
                         response.addCookie(cookies[i]);

                         }else if ("isLogin".equals(cookies[i].getName())) {
                         cookies[i].value=null;
                         response.addCookie(cookies[i]);

                     }
                }
    }    }
完事。第一次写博客。哪位仁兄瞅着了,内容看看得了。以后常写,要变腻害。

你可能感兴趣的:(菜)