使用cookie之前,可先理解session的概念,区分session和cookie的区别和联系。
Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。
一般情况下,服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。当然,也有使用数据库将这个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]); } } } }完事。第一次写博客。哪位仁兄瞅着了,内容看看得了。以后常写,要变腻害。