1.10会话跟踪——URL重写技术和隐藏表单域

URL重写技术:

URL重写是指服务器对接收的URL请求重新写成网站可以处理的另一个URL。在实际使用中,不能够确定客户端浏览器是否支持Cookie,使用URL重写技术可以对请求的URL地址追加会话标识,从而实现会话跟踪功能。

比如一个请求URL是:

http://localhost:8080/JavaWeb/test

重写后的URL是:

http://localhost:8080/JavaWeb/test;jsessionid=24666BB458B400000021641216462AB//(例子,故随便手写的一个id内容)

其中jsessionid就是追加的会话标识,服务器通过它就可以对某个用户进行跟踪访问

URL重写通过HttpServletResponse的encodeURL()和encodeRedirectURL()方法实现,其中第二个方法主要对使用sendRedirect()方法的URL进行重写。URL重写方法根据请求信息中是否包含Set-Cookie请求头来决定是否进行URL重写,若包含该请求头,会将URL原样输出,若不包含,则会将会话标识重写到URL中。

代码演示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		//需要先调用
		request.getSession();
		//a_url是一个url路径,根据实际情况填写
		String link = response.encodeURL("a_url");
		out.print("<a href='"+link+"'>链接请求</a>");
		//进行重定向的时候的使用方式
		//response.sendRedirect(response.encodeRedirectURL("a_url"));
		out.print(link);
	}

需要注意的是要将浏览器的cookie功能关闭了。还有就是需要获取一次session,才能生成jsessionid。

需要注意:

1.如果使用URL重写,那么所有的请求都得使用该方式。

2.需要注意URL的长度是有显示的,尤其是使用GET请求的时候

3.静态页面不能进行会话标识的传递,所以所有的URL地址都必须为动态请求地址

隐藏表单域

利用form表单的隐藏表单域,可以完全脱离浏览器对于Cookie的使用限制以及在用户无法从页面显示看到隐藏标识的情况下,将标识随请求一起传送个服务器处理,从而实现会话的跟踪。

<form action="unknowformTest" method="post">
	<input type="hidden" name="userId"/ value="10010">
	<input type="submit" value="提交"/>
</form>
在servlet中使用HTTPServletRequest对象的getParameter(String attr)方法就可以读取到该参数

猜你喜欢

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