cookie实现自动登录
在网上看到一篇博客,所以将里面的内容用自己的方式写下来
1、Web程序中第一次登录后,再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。
如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:
2、将用户名以cookie的方式发送到客户端,并且将用户名以session属性的方式保存到服务器端以保证安全性,最后处理JSESESSIONID使其持久化(以cookie的形式保存到客户端)当第二次登录时HTTP响应头便会出现两个ID但没有影响,具体代码如下:
* 如果是第一次登录,将用户名和密码作为cookie写到本地
*/
String name = request.getParameter("name");
String pwd = request.getParameter("password");
User user = new User();
String userInfo = user.toString();
if(null!=name && !"".equals(name)){
user.setName(name);
}
if(null!=pwd && !"".equals(pwd)){
user.setPassword(pwd);
}
Cookie cookie = new Cookie("user",userInfo);
cookie.setMaxAge(360*24*60);//设置一年有效期
cookie.setPath("/");//可在同一应用服务器内共享方法
response.addCookie(cookie);//放松到客户段
//凭这个Cookie就自动登录并不安全可以在服务端使用一个Session来管理用户。
//当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session
HttpSession session = request.getSession();
session.setAttribute("user", userInfo);
session.setMaxInactiveInterval(3600*2);//2小时
//但是当cookie关闭后,用于保存SessionID的JSESSIONID会消失(此时cookie并没有过期) ,所以得将JSESESSION持久化
Cookie sessionId = new Cookie("JSESESSIONID",session.getId());
sessionId.setMaxAge(2*60);//设置两小时
sessionId.setPath("/");
response.addCookie(sessionId);
//当用户第二次登陆时,检测这个cookie是否存在
Cookie[] cookies = request.getCookies();
for (Cookie cookie2 : cookies) {
//如果存在这个cookie进行页面跳转
if(cookie2.equals("user")){
if(session.getAttribute("user")!=null){
request.getRequestDispatcher("直接进入主页面的url").forward(request, response);
break;
}else{
//跳转到登录页面
}
}
}
//如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。
//如果我们自已加一个JSESSIONID Cookie,在第一次访问Web程序时,
//HTTP响应头有两个JSESSIONID,但由于这两个JSESSIONID的值完全一样,没有任何影响
//如果在响应头的Set-Cookie字段中有多个相同的Cookie,则按着path和name进行比较,如果这两个值相同,
//则认为是同一个Cookie,最后一个出现的Cookie将覆盖前面相同的Cookie