Cookie

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);
}


登录页面提交给的servlet

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);
}

成功页面略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值