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)方法就可以读取到该参数