很多网站都有为用户保存登录信息的功能,当用户下次进入网站时,可以帮助用户自动登录。.
下面是利用cookie实现自动登录的原理及示例代码:
在doLogin.jsp页面中,当用户第一次登录验证正确时,将用户名和密码作为cookie保存在本地。
System.out.println("用户登陆成功!!!");
//创建cookie
Cookie nameCookie = new Cookie("name",userName);Cookie pwdCookie = new Cookie("pwd",password);
//设置cookie的有效期为三分钟(以秒为单位)。
nameCookie.setMaxAge(3*60);pwdCookie.setMaxAge(3*60);
//把cookie加入到response中,cookie会随着响应保存到客户端。
response.addCookie(nameCookie);response.addCookie(pwdCookie);
//重定向
response.sendRedirect("main.jsp");
当用户再次访问这个页面时,服务器端会检测这个cookie是否存在。
eg:request.setCharacterEncoding("UTF-8");
Cookie[] cookies = request.getCookies();
String name = "";
String pwd = "";
for(Cookie cookie:cookies){
if(cookie.getName().equals("name")){
name = cookie.getValue();
}
if(cookie.getName().equals("pwd")){
pwd = cookie.getValue();
}
}
if(!name.equals("") && !pwd.equals("") ){
response.sendRedirect("doLogin.jsp?userName="+name+"&passwd="+pwd);
}
若存在,会自动通过递值将cookie中的用户名和密码又提交到doLogin.jsp页面,让其重新验证并执行后续操作,实现自动登录。
常见问题:
1.java.lang.IllegalArgumentException:Control character in cookie value or attribute.
原因是有关中文编码的问题,中文采用的是unicode编码,而英文采用的是ASCII编码,所以当COOkie保存中文的时候需要对中文进行编码,而且从Cookie中取出内容的时候也要进行解码,编码和解码可以使用 URLEncoder.encode(name, "utf-8"); URLDecoder.decode(cookies[i].getName(),"utf-8")2.注意一定要先保存在cookie中再跳转到指定JSP页面,不能先跳转到指定页面再保存,这样cookie会获取不到信息。
错误示例:if(rs.next()){
System.out.println("用户登陆成功!!!");
response.sendRedirect("main.jsp");
Cookie pwdCookie = new Cookie("pwd",password);
nameCookie.setMaxAge(3*60);pwdCookie.setMaxAge(3*60);
response.addCookie(nameCookie);response.addCookie(pwdCookie);