URL重写实现session跟踪

        一般情况下,session是通过非持久cookie进行跟踪的,即服务端向客户端发送的JSESSIONID来实现的,但是如果客户端禁止了cookie,session就无法实现跟踪会话,这样对于web应用来说非常不方便;还有一种方法就是用隐藏表单域,这个只能用于特定操作中,仅当每个页面都由表单提交而动态生成的时候,才可以使用隐藏表单域,用来存储相关会话信息,用法为:

<input type="hidden" name="jssesionid" value="7D8449A7EF434DE66DED63227E02AC1E">

下面介绍一种方便通用的方法:通过URL重写技术实现Session的跟踪会话。

下面是测试案例:

提交请求的servlet:SessionTest.java

<pre name="code" class="java">	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		HttpSession s = request.getSession(true);
		s.setAttribute("person1", new Person("xjd", 22));
		s.setAttribute("person2", new Person("xjd1", 23));
		String path = response.encodeURL("./getForm");
		
		out.println("<html><head><title>URL重定向测试</title></head>");
		out.println("<body><form action='"+path+"' method='post'>");
		out.println("用户名:<input type='text' name='user'><br>");
		out.println("密码:<input type='password' name='pass'><br>");
		out.println("<input type='submit'><br>");
		
	}

 处理请求的Servlet: GetForm.java 
 
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		HttpSession s = request.getSession(true);
		out.println(s.isNew()+"<br>");
		out.println(s.getAttribute("person1")+"<br>");
		out.println(s.getAttribute("person2")+"<br>");
	}
浏览器禁止cookie后,运行结果为:

false
com.session.demo.Person@26d4f204
com.session.demo.Person@665cf886
地址栏为:

http://localhost:8080/SessionTest/getForm;jsessionid=7D8449A7EF434DE66DED63227E02AC1E

可见经过String path = response.encodeURL("./getForm");处理后,path中已经将jsessionid值通过URL形式传递给了服务器端,故可以实现session的跟踪会话

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值