1. 程式人生 > 程式設計 >Java中session儲存Users物件實現記住密碼

Java中session儲存Users物件實現記住密碼

之前做過cookie實現記住密碼,這次換成session記住密碼又做了一遍,有很多收穫。
本次部落格分為兩部分。一部分是cookie和session的區別(面試經常被問道);另一部分是sesion實現記住密碼,在Jsp頁面和Controller頁面的程式碼編寫。

一、cookie和session區別

區別:

1.cookie是瀏覽器端技術;將資料儲存到瀏覽器中,不安全不可以儲存中文儲存時編碼: URLEncoder.encode();取值時解碼:URLDecoder.decode();。
2.session是伺服器端技術;將資料儲存到伺服器中,當訪問servlet時,伺服器建立session物件同時會向瀏覽器寫入一個sessionId儲存到cookie中,當瀏覽器關閉,session裡面的資料沒有刪除,而是儲存sessionId的cookie丟失因此找不到資料,安全

相同:
兩者作用範圍都是一次會話(瀏覽器開啟到關閉)有效。

二、session實現記住密碼

分為3步。
1.jsp頁面佈局

在這裡插入圖片描述

預設rem選擇框是選中狀態

<form name="register" action="login.action" method="post">
	<div class="form_row">
		<label class="contact"><strong>Phone:</strong></label> 
		<input type="text" class="contact_input" name="uPhone" id="uPhone" value="${param.uPhone }" onblur="phoneBlur(this.value);"/>
		<span id="uPhoneMsg"></span>
	</div>
	<div class="form_row">
		<label class="contact"><strong>Pwd:</strong></label> 
		<input type="text" class="contact_input" name="uPwd" id="uPwd"/>
		<span id="uPwdMsg">${flag }</span>
	</div>
	<div class="form_row">
		<div class="terms">
			<input type="checkbox" name="rem" id="rem" checked="checked">記住密碼
	<!-- <input type="checkbox" name="terms" id="terms"/> Rember me -->
		</div>
	</div>
	<div class="form_row">
		<input type="submit" class="register" value="login" />
	</div>
</form>

2.controller層邏輯處理
我的程式碼有兩處用到session,這裡只看第二處即可。
//2.登入按鈕按下後 當rem被選中,且密碼正確時,將賬號密碼這個物件存入session

//5.1登入
@RequestMapping("login")
public String login(String uPhone,String uPwd,String rem,Model model,HttpServletResponse response,HttpServletRequest request){
	HttpSession session = request.getSession();
	String flag = "1";
	String uId = us.selectUsersByPhone_PwdService(uPhone,uPwd);
	//判斷如果賬號密碼不存在 返回登入頁面;存在,跳轉到首頁
	if(uId==null){
		flag="密碼錯誤";
			request.setAttribute("flag",flag);
			return "register";
	}else{
		Users u1 = us.selectUsersByIdService(uId);
		//1.只要登入成功 就將users物件存入session中,為之後的過濾器使用
		session.setAttribute("handlerInterceptorSession",u1);
		
		//2.登入按鈕按下後 當rem被選中,且密碼正確時,將賬號密碼存入session
		if(rem.equals("on")){
			Users u2 = new Users(uPhone,uPwd);
			session.setAttribute("remSession",u2);
		}
		return "index";
	}
	
}

3.jsp頁面補充
這裡主要看//5.當游標離開後呼叫記住密碼的功能
邏輯是:使用者輸入賬號游標離開後,從session中取值,如果賬號在session中存在,則獲取賬號對應的密碼,將密碼賦值給輸入框。(前提是:rem選擇框是選中狀態,在1.jsp頁面佈局裡面就設定好了)

<script>
function phoneBlur(uPhone){
var phoneMsg = document.getElementById("uPhoneMsg");
	phoneMsg.innerText="";
	$.ajax({
		type:"post",url:"phoneExist.action",data:{"uPhone":uPhone},dataType:"text",/* 當flag =0 提示使用者不存在
			當flag = 1 普通使用者
		 */
		success:function(flag){
			if(flag==0){
				phoneMsg.innerText = "請先註冊";
			}
		}
	}) 
//5.當游標離開後呼叫記住密碼的功能
remPwd(uPhone);
	
};

//5記住密碼
/*1.當phone游標離開後 當rem被選中 從Remsession裡面遍歷,獲取賬號對應的密碼。 */
//alert($("#rem").val());
function remPwd(uPhone){
	//每次進入 密碼先清空
	$("#uPwd").val("");
	var remVal = $("#rem").val();
	if(remVal=="on"){
		//第一次登入會報異常,所以加""
		var sessionPhone= ${remSession.uPhone}+"";
		var sessionPwd= ${remSession.uPwd}+"";
		//當賬號在session中可以查詢到,就將session中的密碼賦值給輸入框pwd
		if(sessionPhone==uPhone){
			$("#uPwd").val(sessionPwd);
		}
	}
}
</script>

至此,session儲存Users物件實現記住密碼功能完畢,更多相關Java session記住密碼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!