Cookie是一块可以嵌入到HTTP请求和响应中的数据。典型情况下,Web服务器将Cookie值嵌入到响应的Header,而浏览器则在其以后的请求中都将携带同样的Cookie。Cookie的信息中可以有一部分用来存储会话ID,这个ID被服务器用来将某些HTTP请求绑定在会话中。Cookie由浏览器保存在客户端,通常保存为一个文本文件。Cookie还含有一些其他属性,如可选的注释、版本号及最长生存周期等。
由于统一客户端对服务器的请求都会携带Cookie,因此可以通过在Cookie中添加与会话相关的信息达到会话跟踪的目的。下面我们通过创建一个Servlet来掩饰如何通过Cookie实现会话跟踪。示例代码如下:
package com.yl.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 通过Cookie实现会话跟踪,用户没刷新一次页面,则登录次数+1 * * @author LYYL * */ @WebServlet(name="servlet", urlPatterns={"/cookietrack"}) public class CookieTrackServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp); } protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ Cookie cookie = null; Cookie[] cookies = request.getCookies(); if(cookies != null){ boolean flag = false; for(int i = 0; i < cookies.length; i++){ if(cookies[i].getName().equals("VisitTimes")){ String v = cookies[i].getValue(); int value = Integer.parseInt(v) + 1; cookies[i].setValue(Integer.toString(value)); response.addCookie(cookies[i]); flag = true; cookie = cookies[i]; } } } if(cookie == null){ int maxAge = -1; cookie = new Cookie("VisitTimes", "1"); cookie.setPath(request.getContextPath()); cookie.setMaxAge(maxAge); response.addCookie(cookie); } //显示信息 response.setContentType("text/html; charset=utf-8"); PrintWriter pw = response.getWriter(); pw.println("<html>"); pw.println("<head>"); pw.println("<title>Cookie跟踪会话</title>"); pw.println("</head>"); pw.println("<body>"); pw.println("<h2>您好!</h2>"); pw.println("<欢迎您第>"+cookie.getValue()+"次访问该页面<br>"); pw.println("</body>"); pw.println("</html>"); pw.flush(); pw.close(); } }
本例跟踪的是会话中页面的访问次数。程序通过将页面访问的次数写入一个名为“visitTimes”的Cookie中。由于对页面的请求每次都包含了这个Cookie,因此通过每次将Cookie的值取出来显示页面的访问次数,同时又将更新过的值写入到Cookie来达到会话跟踪的目的。
打开浏览器输入:http://localhost:8080/Servlet/cookietrack,会得到目前的登录次数,每刷新一下页面,登陆次数则+1。
时间: 2024-10-09 17:49:34