使用cookie實現自動登錄功能(轉)


在網上看到一篇博客,所以將里面的內容用自己的方式寫下來

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM