Jsp使用Cookie完成記住賬號密碼的功能
推薦一個專注於Java的小眾技術社群:Java之音
網站中對於記住賬號密碼,方便下次登入的使用非常普遍,那麼它是怎麼實現的呢?
首先他的流程是,設計一個複選框,當選中複選框時,就會傳值到處理頁面,複選框的用途就是判斷使用者是否願意記住賬號密碼。
我們通過一個小例子來掌握他的實現步驟,在開始之前首先要了解一下實現這一功能的關鍵:
Cookie,所有的實現所依賴的都是cookie,那麼什麼是Cookie呢?
簡單來說:cookie就是一段文字,它儲存在客戶端(通常來說是瀏覽器)。你可以把cookie當作一個map,裡邊是鍵值對,每個鍵值對有 過期時間、域、路徑、指令碼可否訪問等屬
性;客戶端請求時,預設會帶上cookie資訊,就在http請求報文的header中;伺服器響應時,可以設定cookie資訊,就在http響應報文的header中;
瞭解了Cookie,我們就可以實現記住賬號密碼的功能了
首先,我們寫一個login.jsp,來接收使用者的操作。
<body> <% String username = ""; String password = ""; Cookie[] c = request.getCookies(); if (c != null) { for (int i = 0; i < c.length; i++) { if ("username".equals(c[i].getName())) { username = c[i].getValue(); } else if ("password".equals(c[i].getName())) { password = c[i].getValue(); } } } else { username = " "; password = " "; } %> <div id="qq"> <form action="loginCheck.jsp" method="post"> <table> <tr> <td><input type="text" name="username" value="<%=username%>" /> </td> </tr> <tr> <td><input type="password" name="password" value="<%=password%>" /> </td> </tr> <tr> <td>記住密碼:<input type="checkbox" name="passcookies" value="jizhu" /> </td> <td><input type="submit" value="登入" /> </td> </tr> </table> </form> </div> </body>
這段程式碼實現的思路是,首先搜尋瀏覽器的Cookie,判斷是否存在名為username和password,
如果有,就傳值到form表單,用value="<%=username%>"來使他顯示在輸入框;而當搜尋不到這套Cookie時,輸入框不顯示內容,需要使用者手動輸入。
這時我們需要一個登入資訊處理的jsp,這裡名字是loginCheck.jsp
<body> <% request.setCharacterEncoding("utf-8"); LoginDaoImpl user = new LoginDaoImpl(); String username = request.getParameter("username"); String password = request.getParameter("password"); String remember = request.getParameter("passcookies"); if (!user.loginCheck(username, password)) { out.println("<script>alert('error');</script>"); } else { if (remember != null) { Cookie c1 = new Cookie("username", username); Cookie c2 = new Cookie("password", password); c1.setMaxAge(1000); c2.setMaxAge(1000);//這裡設定儲存這條Cookie的時間 response.addCookie(c1);//新增Cookie response.addCookie(c2); out.println("<script>alert('success and remember this username&password ');</script>"); } else { out.println("<script>alert('success but not remember this username&password');</script>"); } } %> </body>
這裡的實現思路是首先接收登入介面傳過來的值,首先判斷使用者名稱密碼是否存在,不存在程式就終止了,彈出error提示,如果存在再判斷使用者是否選擇了記住密碼,即複選框是否有傳值過來。如果有,new一個Cookie物件,對Cookie進行儲存,如果沒有則正常登入。
主要介紹記住賬號密碼的功能,後臺實現思路不做詳細介紹,程式碼如下
public class LoginDaoImpl implements LoginDao {
public boolean loginCheck(String username, String password) {
boolean result = false;
Connection conn = null;
PreparedStatement state = null;
ResultSet rs = null;
try {
conn = ConnHelper.getConn();
String sql = "select username from userinfo where username=? and password=?";
state = conn.prepareStatement(sql);
state.setString(1, username);
state.setString(2, password);
rs = state.executeQuery();
if (rs.next()) {
result = true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
state.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
}
這樣,一個簡單的使用Cookie記住賬號密碼的功能就實現了,同時可以擴充套件一下,比如,讓使用者自己選擇記住賬號密碼的時長
表單中加上一個輸入框:
<tr>
<td>記住密碼時間:<input type="text" name="time" value="100" /></td>
</tr>
<td>記住密碼時間:<input type="text" name="time" value="100" /></td>
</tr>
登入處理用輸入的時間代替原來設定的值:
<body>
<%
request.setCharacterEncoding("utf-8");
LoginDaoImpl user = new LoginDaoImpl();
String username = request.getParameter("username");
String password = request.getParameter("password");
String remember = request.getParameter("passcookies");
int time = Integer.parseInt(request.getParameter("time"));
if (!user.loginCheck(username, password)) {
out.println("<script>alert('error');</script>");
} else {
if (remember != null) {
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
c1.setMaxAge(time);
c2.setMaxAge(time);
response.addCookie(c1);//新增Cookie
response.addCookie(c2);
out.println("<script>alert('success and remember this username&password 記住密碼時長="
+ time + "');</script>");
} else {
out.println("<script>alert('success but not remember this username&password');</script>");
}
}
%>
</body>
使用Cookie可以完成很多事情,怎麼用它,就要發揮大家想象啦!