之前做過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物件實作記住密碼功能完畢,歡迎大家有不懂的地方留言,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/248611.html
標籤:其他
上一篇:HTML學習筆記
下一篇:svg如何使用
