cookie自動登錄是指把用戶登錄的信息按期限(自定)保存在客戶端,當用戶請求登錄時判斷客戶端用沒有cookie對象,有的話填充值,否則登錄界面的輸入框為空,不進行填充。
登錄界面之前在添加一個選擇登錄的jsp頁面,通過選擇“去登錄”,servlet判斷客戶端此次有沒有cookie對象。所以需要添加一個JSP頁面和一個servlet。
index.jsp部分代碼:
<body>
<a href="/t31/AdminSer?status=auto">先去登錄</a>
</body>
login.jsp部分代碼:
<body>
<form action="/t31/AdminSer" method="post">
管理員姓名:<input type="text" name="aname" value="
${requestScope.aname}" /><br/>
管理員密碼:<input type="text" name="apass" value="
${requestScope.apass}" /><br/>
${requestScope.error}<br/>
<select name="auto">
<option value="0">不自動填充</option>
<option value="7">一周</option>
<option value="30">一月</option>
</select><br/>
<input type="submit" value="提交" />
<input type="hidden" name="status" value="login" />
</form>
</body>
servlet部分代碼:
if(status.equals("login")){
String aname = request.getParameter("aname");
String apass = request.getParameter("apass");
if (aname.equals(apass)) {
/*將用戶登錄名放到session中*/
HttpSession session = request.getSession();
session.setAttribute("aname", aname);
/*判斷用戶是否需要保存自己的登錄信息 */
Cookie anameCookie=new Cookie("aname",aname);
Cookie apassCookie=new Cookie("apass",apass);
/*計算保存時間*/
anameCookie.setMaxAge(60*60*24*Integer.parseInt(request.getParameter("auto")));
apassCookie.setMaxAge(anameCookie.getMaxAge());
/*response代表響應 */
response.addCookie(anameCookie);
response.addCookie(apassCookie);
/*頁面重定向*/
response.sendRedirect("/t31/queryStudent.jsp");
} else{
request.setAttribute("error", "登錄失敗");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}else if(status.equals("auto")){
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("aname")){
request.setAttribute("aname", cookie.getValue());
}
if(cookie.getName().equals("apass")){
request.setAttribute("apass", cookie.getValue());
}
}
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
創建cookie
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);
查詢cookie
//如果沒有cookie,則返回null。
Cookie[] cookies = request.getCookies();
String name = cookie.getName();
String value = cookie.getValue();
cookie的限制
cookie可以禁止
cookie的大小有限制(4k左右)
cookie的數量也有限制(瀏覽器大約能保存300個)
cookie的值叧能是字符串,要考慮編碼問題。
cookie不安全
保存和查詢Cookie流程
a. 瀏覽器向服務器發送addCookie請求
服務器中的AddCookieServlet創建了兩個Cookie:cookie和cookie2
b. 服務器端執行語句response.addCookie(cookie);生成消息頭“set-cookie”,
並將兩個Cookie以鍵值對的方式(“name=aaa”、“passwd=123”)存放在消息頭中發 送給瀏覽器
c. 瀏覽器將Cookie信息保存到本地內存中
d. 瀏覽器繼續向服務器發送請求(帶着消息頭cookie)
服務器端的FindCookieServlet找到Cookie信息,並顯示給瀏覽器