今天筆者在寫個小項目時用到記住密碼,這個的實現原理也簡單一般都是使用cookie,筆者也這樣寫的,先看我的servlet層的代碼:
Customer customer=getReqParamObj(request, Customer.class);
String remPwd=request.getParameter("checkboxSuccess");
boolean flage=false;
if(remPwd!=null&&remPwd.equals("on")){
Cookie[] cs=request.getCookies();
for(Cookie c:cs){
if(c.getName().equals("userpwd")){
c.setValue(customer.getCpwd());
flage=true;
break;
}
}
if(!flage){
Cookie cookie=new Cookie("userpwd", customer.getCpwd());
cookie.setMaxAge(60*30);
response.addCookie(cookie);
}
}
getReqParamObj是我自己寫的一個方法,通過反射機制將傳過來的參數轉換成對象,checkboxSuccess是對應是否勾選記住密碼的複選框
看起來很簡單很流暢,頁面的cookie也有,問題來了,我在界面是這麼取的
<div class="col-sm-10">
<input type="password" class="form-control" id="cpwd"name="cpwd" placeholder="請輸入密碼"
value="${cookie.userpwd.value}" >
</div>
一切都是那麼的自然,然而就是取不到,我以爲是我的el表達式寫錯了,反反覆覆沒看出毛病,換成小腳本來寫如下:
<%
Cookie [] cs=request.getCookies();
String s="";
if(cs!=null&&cs.length>0){
for(Cookie c:cs){
if(c.getName().equals("userpwd")){
s=c.getValue();
break;
}
}
}
%>
再把input那改一下,居然還是不行,我只好debug,進去之後發現通過火狐瀏覽器看到的cookie中存在userpwd,但通過request取到的cookie中沒有這個東西!!
不淡定了,傷自尊了,後來我手賤,在servlet中多寫了這麼一句:
Customer customer=getReqParamObj(request, Customer.class);
String remPwd=request.getParameter("checkboxSuccess");
boolean flage=false;
if(remPwd!=null&&remPwd.equals("on")){
Cookie[] cs=request.getCookies();
for(Cookie c:cs){
if(c.getName().equals("userpwd")){
c.setValue(customer.getCpwd());
flage=true;
break;
}
}
if(!flage){
Cookie cookie=new Cookie("userpwd", customer.getCpwd());
cookie.setMaxAge(60*30);
cookie.setPath("/");//就這一句話設置路徑
response.addCookie(cookie);
}
}
然後他就可以了el輕鬆取到,我取網上看了一下原因,解釋的不多,就記得好像不設置路徑就會可能出現多個,但具體原因不清楚先這樣寫着,我去問問大神。