如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
一般来说,URL重写是支持会话的非常健壮的方法。在不能确定浏览器是否支持Cookie的情况下应该使用这种方法。然而,使用URL重写应该注意下面几点:
1.如果使用URL重写,应该在应用程序的所有页面中,对所有的URL编码,包括所有的超链接和表单的action属性值。
2.应用程序的所有的页面都应该是动态的。因为不同的用户具有不同的会话ID,因此在静态HTML页面中无法在URL上附加会话ID。
3.所有静态的HTML页面必须通过Servlet运行,在它将页面发送给客户时会重写URL。
HTML5 History API中提供了一些state相关方法:history.pushState(data, title[, url])
history.replaceState(data, title[, url])
第一个参数用于提供state data,在用户点击后退,触发window.onpopstate时会提供此对象。
第二个参数用于重写页面标题,目前的浏览器都忽略此参数。
第三个参数用于重写url,仅重写最后一个url段的内容,就像题主提出的那样。
如果要修改url的话请提供第三个参数。