Servlet会话管理——Cookie会话跟踪

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

Servlet会话管理——Cookie会话跟踪的相关文章

2014-07-09 Java Web的学习(5)-----会话管理(Cookie和Session)

1.什么是会话 会话,牛津词典对其的解释是进行某活动连续的一段时间.从不同的层面看待会话,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成购物直到关闭浏览器,这是一个会话.而在web应用的开发者开来,用户登录时我需要创建一个数据结构以存储用户的登录信息,这个结构也叫做会话.因此在谈论会话的时候要注意上下文环境.而本文谈论的是一种基于HTTP协议的用以增强web应用能力的机制或者说一种方案,它不是单指某种特定的动态页面技术,而这种能力就是保

会话管理cookie&amp;session

1.会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话.2.问题:如何在一次会话中保存会话相关的数据.3.Cookie:将会话相关的数据保存到浏览器中,并且在每次访问服务器时都带过去.(浏览器端技术)    3.1javax.servlet.http.Cookie,可以直接利用此类的构造方法创建一个Cookie,创建出来的Cookie需要设置一个名称和值    3.2response身上具有addCookie的方法,可以将创建出来的组织成响应消息

【Web入门系列】初探会话管理-Cookie技术

特点 会话数据保存在浏览器客户端. Cookie技术核心 1.构造Cookie对象 Cookie(String name, String value) 2.设置cookie #设置cookie的有效访问路径 void setPath(String uri) #设置cookie的有效时间 void setMaxAge(int expiry) : @设置cookie的值 void setValue(String value) : 3.发送cookie到浏览器端保存 void response.add

会话管理——cookie和session技术

1 Cookie技术 1.1 Cookie技术特点: 会话数据保存在浏览器客户端 1.2 Cookie的API Cookie类: 保存会话数据 1)创建Cookie对象,用于保存会话数据 new Cookie(java.lang.String name, java.lang.String value) 2)设置Cookie对象 void setPath(java.lang.String uri)  设置cookie有效路径 void setMaxAge(int expiry)     设置coo

jsp/servlet学习三之会话管理初解

由于http的无状态性,使得会话管理或会话跟踪成为web应用开发一个无可避免的主题.默认下,一个web服务器无法区分一个http请求是否为第一次访问.例如,一个web邮件应用要求用户登陆后才能查看邮件,因此,当用户输入了相应的用户名和密码后,应该不应该再次提示需要用户登陆,应该必须记住那些用户已经登陆.换句话说,应该必须能管理用户的会话. URL重写 URL重写是一种会话跟踪技术,它将一个或者多个token添加到URL的查询字符串中,每个token通常为key=value形式,如下: url?k

Java中的会话管理——HttpServlet,Cookies,URL Rewriting(译)

参考谷歌翻译,关键字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url-rewriting Java Web应用程序中的会话管理(Session Management)是一个非常有趣的话题.Java Servlet中的会话通过不同的方式进行管理,例如Cookie,HttpSession API,URL重写等. 这是Java Web应用程序系列教程中的第三篇文章,您可能

session management会话管理的原理

web请求与响应基于http,而http是无状态协议.所以我们为了跨越多个请求保留用户的状态,需要利用某种工具帮助我们记录与识别每一次请求及请求的其他信息.举个栗子,我们在淘宝购物的时候,首先添加了一本<C++ primer>进入购物车,然后我们又继续去搜索<thinking in java>,继续添加购物车,这时购物车应该有两本书.但如果我们不采取session management会话管理的话,基于http无状态协议,我们在第二次向购物车发出添加请求时,他是无法知道我们第一次添

第十章 会话管理——《跟我学Shiro》

Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理.会话事件监听.会话存储/持久化.容器无关的集群.失效/过期支持.对Web的透明支持.SSO单点登录的支持等特性.即直接使用Shiro的会话管理可以直接替换如Web容器的会话管理. 会话 所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据.如访问一些网站时登录成功后,网站可以记住用

10、会话管理/编程实战分析/Jsp

1 会话管理回顾 会话管理 1)会话管理: 管理浏览器和服务器之间的会话过程中产生的会话数据 2)Cookie技术: 会话数据保存在浏览器客户端. Cookie核心的API: 2.1 在服务器端创建Cookie对象 Cookeie cookie = new Cookie("name","value"); 2.2 把cookie发送给浏览器端(通过响应头:set-cookie) response.addCookie(cookie); 2.3 浏览器带着cookie信息