在網上看到一篇博客,所以將里面的內容用自己的方式寫下來
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