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都是以文件的方式存储的,所以安全性不高。