1.8会话跟踪——Cookie技术

Internet通信协议分为两大类,有状态协议和无状态协议。两者最大的差别在于客户端和服务器之间维持联机上的不同。

Http协议是一种无状态协议,采用“连接—请求—应答—关闭连接”模式,请求结束随即就会关闭连接。而Web应用的交互式是十分重要的,而Http协议不能保持状态,所以需要引入其他技术来解决这些问题。

会话跟踪技术是一种在客户端和服务器之间保持HTTP状态的解决方案。要做到上次请求传递的数据可以维持到下次请求,并辨别是否是相同的客户端发送的。

1.Cookie技术

Cookie技术是一种在客户端保持会话跟踪的解决方案。Cookie是指某些网站为了辨别用户身份而存储在用户终端上的文本信息(一般加密过),Cookie在用户第一次访问服务器时,由服务器通过响应头的发送给客户端浏览器,当用户再次向服务器发送请求的时候会附带上这些文本信息。服务器接受到请求后,通过分析请求头的内容得到客户端特有的信息,从而动态生成与该客户端相对应的内容。

Cookie的创建:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Cookie cookie = new Cookie("name", "tom");
		response.addCookie(cookie);
	}

通过浏览器请求该Servlet之后,便可以在浏览器查看到当前页面的Cookie。

通过方法获取到Cookie:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		Cookie cookie = new Cookie("name", "tom");
		response.addCookie(cookie);
		
		Cookie[] cookies = request.getCookies();
		if(cookies != null) {
			for (Cookie c : cookies) {
				out.println(c.getName()+"="+c.getValue()+"<br/>");
			}
		}
	}

再次访问这个Servlet就可以获取到上次存储的内容了。

设置Cookie被其他应用访问:

默认情况下,Cookie只能被创建它的应用获取,但是使用它的setPath()方法就可以重新指定其访问路径。

cookie.setPath("/");//这样设置Cookie可以被服务器下所有应用访问

Cookie的存活时间:

可以通过setMaxAge方法来设置Cookie的存活时间,如果为正数就表示其可以存在的秒速,如果为负数表示其是临时Cookie,如果为0就是通知浏览器删除Cookie。

cookie.setMaxAge(7*24*60*60);//设置Cookie的存在时间为一周

Cookie的缺点:

Cookie可能被禁用

Cookie可能被删除

Cookie不能被不同浏览器互相访问

单个Cookie保存的数据大小不超过4KB,很多浏览器限制同一个站点最多保存20个Cookie

Cookie都是以文件的方式存储的,所以安全性不高。

猜你喜欢

转载自blog.csdn.net/smallhc/article/details/80644022