Cookie:服务器送给浏览器一段资料,可以让服务器识别是哪个浏览器访问的服务器。当浏览器下次再访问同一个网站的时候,浏览器就会带着这段小资料给服务器。用于服务器对浏览器的会话跟踪。
例如:访问http:localhost:8080/a/b/c.html
此时由于是第一次访问,服务器会发给浏览器一个cookie。(Cookie: JSESSIONID=391ECDB4CDAD2001056831C1DA1963D2)
这时再去访问http:localhost:8080/a/b/c/d.html。
此时浏览器的请求消息中就带有了一个cookie。(Cookie: JSESSIONID=391ECDB4CDAD2001056831C1DA1963D2)
问:为何访问的是同一个服务器上的两个不同页面,会同一个cookie。
答:当访问同一个服务器下的相同目录,或者相同目录的子目录时,用的是同一个cookie。如果是上一级目录,这时就会cookie就会改变。
Cookie也可以设置作用路径,表示在什么路径下这个Cookie有效。
Cookie cookie = new Cookie("userName","xxc");
cookie.setPath("/");
response.addCookie(cookie);
Cookie还有一个Domain属性。例如Domain=.wow.com
这时www.wow.com的cookie到了bbs.wow.com也能起作用。前提条件是path的层次也一样。
设置Cookie的有效时间:(参数以秒为单位)
Cookie cookie = new Cookie("userName","xxc");
cookie.setMaxAge(60);
Cookie小例子:进入一个登录页面,用户名,密码,还有一个是否记住用户名和密码的复选框。当输入了用户名和密码并且选中了复选框点击提交后,帐号和密码被存在了Cookie中,那么关闭浏览器后,再次进入登录页面,就会回显刚才输入的数据。
登录页面:
<form action="<%=request.getContextPath() %>/servlet/CookieTest" method="post">
帐号<input type="text" name="userName" value="${userName}"><br>
密码<input type="password" name="passWord" value="${passWord}"><br>
记住用户名和密码<input type="checkbox" name="cookie" checked="${checked}"><br>
<input type="submit" value="提交">
</form>
跳转到登录页面的servlet,在这个servlet中获取Cookie,如果有就进行回显。(通过servlet跳转到一个login页面并不是多此一举,因为可能要在登录前处理一些操作,例如cookie的获取)
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String cookieBoolean = request.getParameter("cookie");
Cookie[] cookies = request.getCookies();
if(cookieBoolean!=null){
request.setAttribute("checked", "checked");
}
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
String name = cookies[i].getName();
String value = cookies[i].getValue();
if("userName".equals(name)){
request.setAttribute("userName", value);
}
if("passWord".equals(name)){
request.setAttribute("passWord", value);
}
}
}
request.getRequestDispatcher("/WEB-INF/cookie/login.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String cookieBoolean = request.getParameter("cookie");
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
Cookie cookie_userName = new Cookie("userName",userName);
Cookie cookie_passWord = new Cookie("passWord",passWord);
if(cookieBoolean!=null){
cookie_userName.setPath("/");
cookie_passWord.setPath("/");
cookie_userName.setMaxAge(60*60);
cookie_passWord.setMaxAge(60*60);
}
response.addCookie(cookie_userName);
response.addCookie(cookie_passWord);
request.getRequestDispatcher("/WEB-INF/cookie/success.jsp").forward(request, response);
}
成功页面略。