使用 URL 重写跟踪会话

原创 2004年08月11日 15:51:00

在某些情况下,若是不能使用Cookie跟踪记录用户会话的话,就必须使用URL重写来跟踪会话。使用 URL 重写跟踪会话的应用程序必须遵循某些编程准则。应用程序开发者需要:

  • 对会话小服务程序进行编程以编码 URL
  • 提供小服务程序或 JSP 文件作为应用程序的入口点
  • 避免在应用程序中使用普通 HTML 文件

对会话小服务程序进行编程以编码 URL

根据小服务程序是将 URL 返回到浏览器,还是将它们重定向,在小服务程序代码中包括 encodeURL( ) 或 encodeRedirectURL( )。这里是您当前放在小服务程序代码中的示例演示。

重写 URL 以返回浏览器

假设您当前有语句:


在将 URL 发送到输出流之前,更改小服务程序以调用 encodeURL 方法。


重写 URL 以重定向

假设您当前有下列语句:


在将 URL 发送到输出流之前,更改小服务程序以调用 encodeRedirectURL 方法。


encodeURL() 和 encodeRedirectURL() 方法是 HttpServletResponse 对象的一部分。这些调用在对 URL 进行编码之前将检查是否配置了 URL 重写。如果未配置,则返回原始的 URL。

如果启用了 cookie 和 URL 重写,而且调用了 response.encodeURL() 或 encodeRedirectURL(),即使做 HTTP 请求的浏览器处理了会话 cookie,也将编码该 URL。

您也可以配置会话支持来启用协议开关重写。当启用了此选项,该产品将使用会话标识来编码 URL,以在 HTTP 和 HTTPS 协议间转接。要获得详细信息,请参阅相关信息。

提供小服务程序或 JSP 文件作为入口点

应用程序的入口点(如初始屏幕所显示的)可能不需要使用会话。然而,如果应用程序在会话创建后通常需要会话支持(这意味着它的某些部分(如小服务程序)需要会话支持),则所有的 URL 必须是已编码的以使需要该会话支持的小服务程序(或其它应用程序组件)永久保留该会话标识。

下例显示了如何在 JSP 文件中嵌入 Java 代码:


避免在应用程序中使用普通 HTML 文件

注,使用 URL 重写来维护会话状态,请勿从普通 HTML 文件(带有 .html 或 .htm 扩展名的文件)链接到您部分的应用程序。

因为普通 HTML 文件中无法使用 URL 编码,所以这种限制是必需的。为了使用 URL 重写来维持状态,用户在该会话期间所请求的每个页面都必须具有 Java 解释器所能理解的代码。

如果会话期间用户可能访问的应用程序(或 Web 应用程序)或部分站点中含有这种普通 HTML 文件,则请将它们转换成 JSP 文件。

这将影响到应用程序编写者,因为如上述描述,用 URL 重写维护会话要求应用程序中的每个小服务程序必须对 标记上的每个 HREF 属性使用 URL 编码。

如果应用程序中的一个或多个小服务程序不调用 encodeURL(String url) 或 encodeRedirectURL(String url) 方法,将丢失会话。

附:javax.servlet.http.HttpServletResponse的两个方法

encodeRedirectURL

  对sendRedirect方法使用的指定URL进行编码。如果不需要编码,就直接返回这个URL。之所以提供这个附加的编码方法,是因为在redirect的情况下,决定是否对URL进行编码的规则和一般情况有所不同。所给的URL必须是一个绝对URL。相对URL不能被接收,会抛出一个IllegalArgumentException。

  所有提供给sendRedirect方法的URL都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。

encodeURL

  对包含session ID的URL进行编码。如果不需要编码,就直接返回这个URL。Servlet引擎必须提供URL编码方法,因为在有些情况下,我们将不得不重写URL,例如,在响应对应的请求中包含一个有效的session,但是这个session不能被非URL的(例如cookie)的手段来维持。

  所有提供给Servlet的URL都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。

URL重写实现会话跟踪

servlet创建的所有链接的重定向都必须将会话ID编码为URL的一部分。在服务器指定的URL编码的方法中,最可能的一种是给URL加入一些参数或者附加的路径信息。      为了说明URL Re...
  • iwwenbo
  • iwwenbo
  • 2013-06-22 14:20:51
  • 566

jsp的URL重写实现会话跟踪技术

1.新建一个Dynamic Web Project项目,里面新建两个java文件和一个jsp文件,整体的框架如下所示: 2.useSession.jsp里面的代码如下所示: ...
  • qq_29656961
  • qq_29656961
  • 2017-09-30 16:10:40
  • 124

会话跟踪技术:会话Cookie,URL重写和HttpSession

 一,会话跟踪(session tracking)技术 会话是客户端发送请求,服务器返回响应的连接时间段。 HTTP是无状态协议:每次都是单独连接,不能维持客户的上下文信息。 会话跟踪技术是用于维持客...
  • qfs_v
  • qfs_v
  • 2008-07-15 09:33:00
  • 12882

会话跟踪技术介绍——cookie,url 重写, 隐藏表单域

由于HTTP协议是一种无状态的协议,也就是说当用户请求一个资源,服务器端根据请求做出响应,回发到客户端后,就关闭了连接(HTTP无状态协议详细请参考我的另外一篇文章)  通俗易懂客户端与服务器端交互...
  • qq_20545159
  • qq_20545159
  • 2015-10-29 23:37:15
  • 1670

用URL重写来实现会话管理

通常,会话管理是通过服务器将 Session ID 作为一个 cookie 存储在用户的 Web 浏览器中来唯一标识每个用户会话。如果浏览器不支持 cookies,或者将浏览器设置为不接受 cooki...
  • ning109314
  • ning109314
  • 2011-12-29 18:05:59
  • 1320

使用 URL 重写跟踪会话

在某些情况下,若是不能使用Cookie跟踪记录用户会话的话,就必须使用URL重写来跟踪会话。使用 URL 重写跟踪会话的应用程序必须遵循某些编程准则。应用程序开发者需要: 对会话小服务程序进行编程以编...
  • adijava
  • adijava
  • 2004-08-11 15:51:00
  • 2683

Url重写的简单方法

 protected void Application_BeginRequest(Object sender, EventArgs e)    {        string oldUrl = Htt...
  • ahhisoft
  • ahhisoft
  • 2007-01-30 21:09:00
  • 382

URL地址重写

URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 ...
  • abc19900828
  • abc19900828
  • 2014-09-22 16:39:16
  • 1052

会话追踪--cookie/重写url/隐藏域/session

网络通信协议分类1.有状态的协议:TCP/IP,自从客户端与服务器连接上以后,这个连接会一直保持畅通,持续保持连接状态。 比如:打电话,从双方接通开始,一直到任何一方挂断电话位置,期间一直保持畅通。...
  • yangruxi
  • yangruxi
  • 2017-07-28 16:24:06
  • 388

会话跟踪技术介绍——cookie ,url 重写, 隐藏表单域

由于HTTP协议是一种无状态的协议,也就是说当用户请求一个资源,服务器端根据请求做出响应,回发到客户端后,就关闭了连接(HTTP无状态协议详细请参考我的另外一篇文章) 通俗易懂客户端与服务器端交互原理...
  • lvpin
  • lvpin
  • 2007-06-09 18:54:00
  • 3042
收藏助手
不良信息举报
您举报文章:使用 URL 重写跟踪会话
举报原因:
原因补充:

(最多只允许输入30个字)