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信息,并显示给浏览器