繼 [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教學手冊 第二版」
文章標籤
全站熱搜
