JavaWeb之Cookie

JavaWeb之Cookie:会话跟踪的一种机制

  Cookie 机制采用的是客户端保持HTTP状态信息的方案。

  Cookie 是在浏览器访问WEB服务器的某个资源是,有WEB服务器再HTTP响应消息头中附带传送给浏览器的一个小文本文件,一旦WEB浏览器保存的某个Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传个WEB服务器。
  如果创建了一个Cookie,并将他发送到浏览器,默认情况下它是一个会话级别的Cookie,存储在浏览器的内存中,用户默认退出浏览器后被删除,若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。

  ----setMaxAge 设置Cookie的最大时效,以秒为单位,若为0,表示立即删除该Cookie,若为负数表示不存储该Cookie。

  ----setPath 设置Cookie的作用范围。可以作用当前目录和当前目录的子目录,但不能作用于当前目录的上一级目录。

  ----response.addCookie(cookie);调用response的一个方法把Cookie 传给客户端。

使用Cookie 实现显示最近浏览的商品:

books.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<a href="book.jsp?book=1">1</a><br>
<a href="book.jsp?book=2">2</a><br>
<a href="book.jsp?book=3">3</a><br>
<a href="book.jsp?book=4">4</a><br>
<a href="book.jsp?book=5">5</a><br>
<a href="book.jsp?book=6">6</a><br>
<a href="book.jsp?book=7">7</a><br>
<a href="book.jsp?book=AAA">AAA</a><br>

<br><br>

<%
//获取所有的Cookie,选择符合条件的
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
			for (Cookie c : cookies) {
				String cookieName = c.getName();
				if (cookieName.startsWith("BOOK_")) {
					out.print(c.getValue());
					out.print("<br>");
				}
			}
		}
%>

</body>
</html>
book.jsp

<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h4>Book Detail Page</h4>
	Book:<%=request.getParameter("book")%>

	<br>
	<br>

	<a href="books.jsp">Return</a>
	<%
		String book = request.getParameter("book");
		//1.确定要被删除的Cookie
		//前提:BOOK开头的Cookie数量大于或等于5
		Cookie[] cookies = request.getCookies();
		List<Cookie> bookCookies = new ArrayList<Cookie>();
		//用来保存和books.jsp传入的book匹配的那个Cookie
		Cookie tempCookie = null;
		if (cookies != null && cookies.length > 0) {
			for (Cookie c : cookies) {
				String cookieName = c.getName();
				if (cookieName.startsWith("BOOK_")) {
					bookCookies.add(c);
					
					if(c.getValue().equals(book)){
						tempCookie = c;
					}
				}
			}
		}
		//若从books.jsp页面传入的book不在Book_的Cookie中则删除第一个Cookie
		if(bookCookies.size() > 5 && tempCookie == null){
			tempCookie = bookCookies.get(0);
		}
		//若在其中,则删除该Cookie,放置新的进去
		if(tempCookie != null){
			tempCookie.setMaxAge(0);
			response.addCookie(tempCookie);
		}

		//2.把从books.jsp传入的book作为一个Cookie返回
		Cookie c = new Cookie("BOOK_" + book, book);
		response.addCookie(c);
	%>

</body>
</html>



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值