close
繼 [JSP/Servlet][讀書筆記]會話管理-隱藏欄位(Hidden Field) 這篇提到會話管理的觀念後,
我們接下來看看如何用Cookie的方式來達成會話管理的需求
首先我們寫一支Servlet來處理首頁的呈現方式,如下所示:
@WebServlet(name = "IndexServlet", urlPatterns = {"/index.do"}) public class IndexServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); if(cookies != null) { for(Cookie cookie : cookies) { String name = cookie.getName(); String value = cookie.getValue(); if("user".equals(name) && "allen0818".equals(value)) { request.setAttribute(name, value); request.getRequestDispatcher("/user.view").forward(request, response); return; } } } response.sendRedirect("login.html"); } --- 下略 --- }
這邊主要作的事情是從Cookied中去找找看有無名為user且值為allen0818的cookie
如果有就直接導向到使用者頁面,如果沒有則導向到登入頁面讓使用者重新登入
接著,我們設計一個簡單的表單login.html如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登入網頁</title> </head> <body> <form action="login.do" method="post"> 名稱:<input type="text" name="user"><br> 密碼:<input type="password" name="passwd"><br> 自動登入:<input type="checkbox" name="login" value="auto"><br> <input type="submit" value="送出"> </form> </body> </html>
提供了可供使用者填寫帳號密碼及是否允許自動登入的選項的功能
最後我們再寫一支Servlet來處理使用者按下送出按鈕後的驗證功能,程式內容:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String user = request.getParameter("user"); String passwd = request.getParameter("passwd"); if("allen0818".equals(user) && "123456".equals(passwd)) { String login = request.getParameter("login"); if("auto".equals(login)) { Cookie cookie = new Cookie("user", "allen0818"); cookie.setMaxAge(7 * 24 * 60 * 60); //seconds response.addCookie(cookie); } request.setAttribute("user", user); request.getRequestDispatcher("user.view").forward(request, response); } else { response.sendRedirect("login.html"); } }
這邊可以看到,如果使用者允許自動登入功能的話,程式會幫他建立一個cookie
並透過 response.addCookie(cookie); 的方式回傳給瀏覽器,讓瀏覽器來建立cookie
Cookie cookie = new Cookie("user", "allen0818"); cookie.setMaxAge(7 * 24 * 60 * 60); //seconds response.addCookie(cookie);
如此一來就能做到使用者自動登入的需求囉,
跟使用隱藏欄位來暫存資訊一樣,只是這次我們將資訊存到了cookie中
不但不會有被直接透過原始碼得知資訊內容的風險,我們還可以透過setMaxAge()來設定
cookie的存活時間(單位:秒),所以不會因為使用者關閉頁面或瀏覽器就失效了
參考資料:
1. 「Servlet&JSP教學手冊 第二版」
文章標籤
全站熱搜