1. 程式人生 > >Jsp使用Cookie完成記住賬號密碼的功能

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可以完成很多事情,怎麼用它,就要發揮大家想象啦!