JavaWeb之Cookie笔记

一、Cookie概述

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

Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件。

一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器。

二、在Servlet中使用Cookie

Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,它包含有生成Cookie信息和提取Cookie信息的各个属性的方法。

Cookie类的方法:

构造方法: public Cookie(String name,String value)

getName方法

setValue与getValue方法

setMaxAge与getMaxAge方法

setPath与getPath方法

HttpServletResponse接口中定义了一个addCookie方法,它用于在发送给浏览器的HTTP响应消息中增加一个Set-Cookie响应头字段。

HttpServletRequest接口中定义了一个getCookies方法,它用于从HTTP请求消息的Cookie请求头字段中读取所有的Cookie项。

三、会话Cookie和持久Cookie

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式

简单示例:

①用Cookie实现自动登录

login.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>
	<form action="index.jsp" method="post">
		<input type="text" name="userName" />
		<input type="submit" name="Submit" />
	</form>
</body>
</html>

index.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>

	<%
		String name = request.getParameter("userName");
		//判断name是否为空
		if(name!=null && !name.trim().equals("")){
			Cookie cookie = new Cookie("userName",name);
			cookie.setMaxAge(30);
			response.addCookie(cookie);
		}else{  //为空,找所有的Cookie有没有登录过的记录
			Cookie[] cookies = request.getCookies();
			if(cookies!=null && cookies.length > 0){
				for(Cookie c : cookies){
					if(c.getName().equals("userName")){
						name = c.getValue();
					}
				}
			}
		}
		//如果找到了,直接进index.jsp,会出现Hello,否则重定向到login.jsp
		if(name != null && !name.trim().equals("")){
			out.print("Hello : "+name);
		}else{
			response.sendRedirect("login.jsp");
		}
	%>

</body>
</html>

②:实现最近阅览的5本书籍,要求,记录阅览历史,如果超过5本,删除最早阅览的那本的记录,对于已经阅览过的书,而又重新阅览,删除原来的记录,添加新纪录

books.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ 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=JavaWeb">JavaWeb</a><br><br>
	<a href="book.jsp?book=Java">Java</a><br><br>
	<a href="book.jsp?book=Oracle">Oracle</a><br><br>
	<a href="book.jsp?book=Ajax">Ajax</a><br><br>
	<a href="book.jsp?book=JavaScript">JavaScript</a><br><br>
	<a href="book.jsp?book=Android">Android</a><br><br>
	<a href="book.jsp?book=Struts">Struts</a><br><br>
	<a href="book.jsp?book=Spring">Spring</a><br><br>
	<a href="book.jsp?book=Hibernate">Hibernate</a><br><br>
	<hr>

	<%
		//打印符合条件的书名
		Cookie[] cookies = request.getCookies();
		if(cookies != null && cookies.length > 0){
			for(Cookie c : cookies){
				if(c.getName().startsWith("com_")){
					out.print(c.getValue());
					out.print("<br>");
				}
			}
		}
	%>
</body>
</html>

book.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ 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>

	<%
		//获取当前书的名字
		String book = request.getParameter("book");
		//设置一个临时对象,用于判断最近一次点击的书,是否以前点击过
		Cookie cookieTep = null;
		//获取所有的Cookie
		Cookie[] cookies = request.getCookies();
		//创建存储符合条件集合,用于存储Cookie
		List<Cookie> cookieColl = new ArrayList<Cookie>();
		if(cookies != null && cookies.length > 0){
			for(Cookie c: cookies){
				if(c.getName().startsWith("com_")){
					cookieColl.add(c);
					//如果以前点击过,记录以前的对象
					if(c.getValue().equals(book)){
						cookieTep = c;
					}
				}
			}
		}
		//若果没有点击过 或者 List的size不满5,就不需要删除最先点击的那个
		if(cookieColl.size() >= 5 && cookieTep == null){ //只要大于5就删第一个,所以会一直最多只要5个
			cookieTep = cookieColl.get(0);
		}
		//如果以前点击过,杀死,并马上回应books.jsp,将以前点击的Cookie信息杀死
		if(cookieTep != null){
			cookieTep.setMaxAge(0);
			response.addCookie(cookieTep);
		}
		//创建最新的点击记录的Cookie,并回应
		Cookie cookie = new Cookie("com_"+book,book);
		response.addCookie(cookie);
	%>

	<a href="books.jsp">Return</a>
</body>
</html>

Cookie存储实现好像是类似于栈的感觉....

四、关于Cookie的作用范围

可以作用于当前目录和当前目录的子目录,但不能作用于当前目录的上一级目录

通过 cookie.setPath(request.getContextPath()); 就可以设置Cookie的作用范围(当前的Cookie所在的Web工程的站点),即: /Cookie

时间: 2024-10-18 01:06:55

JavaWeb之Cookie笔记的相关文章

JavaWeb利用cookie记住账号

JavaWeb利用cookie记住账号. 首先,来看看界面什么样子. 记住账号最普遍的做法,就是在点击登录时,将账号保存到cookie中. 材料准备 <script src="${ctx}/background/js/jquery-1.7.2.js" type="text/javascript"></script> <script src="${ctx}/background/js/jquery.cookie.js"

JavaWeb之cookie缓存技术

web应用的会话技术:打开浏览器并访问网站,请求多个资源,关闭浏览器的过程. 在这个过程中,缓存用户数据常用的有两种技术: 1.cookie技术:用于在浏览器端,缓存用户的数据,可以理解为数据缓存在用户本地 2.session技术:用于在服务端,缓存用户的数据,可以理解为数据缓存在服务器. cookie技术: 1.服务器需要缓存数据,将数据发给浏览器,浏览器对缓存数据进行存储;当浏览器再次访问服务器的时间后,会将缓存信息,一起发给服务器. 2.cookie技术的原理图解: 根据上图分析如下: a

javaWEB与cookie

Cookie1. Http协议与Cookie(了解)  * Cookie是HTTP协议制定的!先由服务器保存Cookie到浏览器,再下次浏览器请求服务器时把上一次请求得到Cookie再归还给服务器  * 由服务器创建保存到客户端浏览器的一个键值对!服务器保存Cookie的响应头:Set-Cookie: aaa=AAA  Set-Cookie: bbb=BBB    > response.addHeader("Set-Cookie", "aaa=AAA");re

CentOS7的安装及部署javaweb项目 - 学习笔记

一, 概述: 这两天在捣鼓linux的东西,安装及配置网络环境,共享设置,以及安装jdk , tomcat环境,并将自己开发的javaweb系统部署到上述环境中.经过周末熬到深夜,终于搞掂,现在整理一下笔记,分享出来,以后也可以回顾. 二, 安装CentOS7: 我这里是基于VirtualBox的安装,安装的是无桌面版本CentOS 1, 下载virtualbox并安装 此处省略100字.... 2, 下载CentOS最小安装版本 官网: https://www.centos.org/downl

基于CentOS7上的搭建javaweb环境 - 学习笔记

一, 概述 上一篇记录了安装CentOS7的基本步骤及配置,现在要讲如何搭建基于CentOS7环境的javaweb环境了,我以 mysql + jdk1.8.0_91 + apache tomcat7.0.69 为例进行讲述. 二, 安装步骤 1, 首先在CentOS7下在线安装mysql数据库服务 (1)先查看是否已安装了mysql rpm -qa | grep mysql (2)若安装了,可以卸载,再重新安装 yum -y remove mysqlxxxxx (3)安装 yum -y ins

JavaWeb之Cookie

时间:2016-11-17 22:32 --Cookie 服务器保存到客户端的东西. 一.Http协议与Cookie    1.Cookie是HTTP协议制定的        先由服务器保存Cookie到浏览器,在浏览器下一次请求服务器时把上一次请求得到的Cookie再发送给浏览器. 2.由服务器创建并保存到客户端浏览器的一个键值对        服务器保存Cookie的响应头:Set-Cookie:aaa=AAA    Set-Cookie:bbb=BBB 3.当浏览器请求服务器时,会把该服务

javaWeb 使用cookie显示商品浏览记录

package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import javax.servlet.ServletException; import javax.servlet.http.C

JavaWeb之Cookie&amp;Session(六)

简介 现在每天整理笔记,第一是巩固知识,第二是把学过的变成自己的.虽然笔记内容很普通,但掌握能这些,变成自己的知识,也是挺不错的 学习技巧 Cookie和Session学习时,明白如何使用以及原理.剩下时间大量练习案例,增加对Cookie和Session的认识 Cookie对象 0. 会话管理 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话 会话过程中要解决的问题 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产

cookie笔记

1 1.cookie的数量.大小都有限,可以控制过期时间 2 2.cookie是document的一个属性 3 3.document.cookie="user=wang"; 4 document.cookie="pass=123"; 5 “=”号不会覆盖 而是添加内容 6 cookie默认过期时间为浏览器关闭 7 4.expires为设置时间 8 9 利用new Date()获取时间 10 getFullYear() 11 getMonth()//其中月份是从0开始