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)方法就可以读取到该参数
本文介绍URL重写技术及其在实现会话跟踪中的应用。通过HttpServletResponse的方法encodeURL()和encodeRedirectURL()实现URL重写,使服务器能够通过会话标识跟踪用户。此外,还介绍了使用隐藏表单域实现会话跟踪的方法。
317

被折叠的 条评论
为什么被折叠?



