使用cookie实现自动登录功能(转)

时间:2024-03-07 20:03:08

在网上看到一篇博客,所以将里面的内容用自己的方式写下来

1、Web程序中第一次登录后,再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。

如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:

2、将用户名以cookie的方式发送到客户端,并且将用户名以session属性的方式保存到服务器端以保证安全性,最后处理JSESESSIONID使其持久化(以cookie的形式保存到客户端)当第二次登录时HTTP响应头便会出现两个ID但没有影响,具体代码如下:

 1 /*
 2          * 如果是第一次登录,将用户名和密码作为cookie写到本地
 3          */
 4         String name = request.getParameter("name");
 5         String pwd = request.getParameter("password");
 6         User user = new User();
 7         String userInfo = user.toString();
 8         if(null!=name && !"".equals(name)){
 9             user.setName(name);
10         }
11         if(null!=pwd && !"".equals(pwd)){
12             user.setPassword(pwd);
13         }
14         Cookie cookie = new Cookie("user",userInfo);
15         cookie.setMaxAge(360*24*60);//设置一年有效期
16         cookie.setPath("/");//可在同一应用服务器内共享方法
17         response.addCookie(cookie);//放松到客户段
18         //凭这个Cookie就自动登录并不安全可以在服务端使用一个Session来管理用户。
19         //当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session
20         HttpSession session = request.getSession();
21         session.setAttribute("user", userInfo);
22         session.setMaxInactiveInterval(3600*2);//2小时
23         //但是当cookie关闭后,用于保存SessionID的JSESSIONID会消失(此时cookie并没有过期) ,所以得将JSESESSION持久化
24         Cookie sessionId = new Cookie("JSESESSIONID",session.getId());
25         sessionId.setMaxAge(2*60);//设置两小时
26         sessionId.setPath("/");
27         response.addCookie(sessionId);
28         
29         
30         
31         //当用户第二次登陆时,检测这个cookie是否存在
32         Cookie[] cookies = request.getCookies();
33         for (Cookie cookie2 : cookies) {
34             //如果存在这个cookie进行页面跳转
35             if(cookie2.equals("user")){
36                 if(session.getAttribute("user")!=null){
37                     request.getRequestDispatcher("直接进入主页面的url").forward(request, response);
38                     break;
39                 }else{
40                     //跳转到登录页面
41                 }
42                 
43             }
44         }
45          //如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。
46         //如果我们自已加一个JSESSIONID Cookie,在第一次访问Web程序时,
47         //HTTP响应头有两个JSESSIONID,但由于这两个JSESSIONID的值完全一样,没有任何影响
48         //如果在响应头的Set-Cookie字段中有多个相同的Cookie,则按着path和name进行比较,如果这两个值相同,
49         //则认为是同一个Cookie,最后一个出现的Cookie将覆盖前面相同的Cookie