我目前正在使用Intelligencia's URL Rewriter .NET HTTPModule来重写网址。我正在使用其自定义转换功能,它允许我提供包含执行实际URL转换的方法的程序集。
我启用了无Cookie会话,这会对URL重写器造成一些干扰。
所以,让我们说服务器上的路径是这样的:
http://www.foobar.com/actualPath/index.aspx
但是我想用url重写来使路径看起来像这样:
http://www.foobar.com/rewrittenPath/index.aspx
我制作了一个脚本来输出以下内容:
- Request.Url(来自我的代码隐藏)
- Request.RawUrl(来自我的代码隐藏)
- document.location(来自javascript)
我在地址栏中输入以下内容:
http://www.foobar.com/rewrittenPath/index.aspx
当我禁用无Cookie会话时,一切正常。我的脚本输出以下值:
- Request.Url显示为http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl显示为/rewrittenPath/index.aspx
- document.location显示为http://www.foobar.com/rewrittenPath/index.aspx
- 地址栏中的URL与我最初输入的内容保持不变。
但是,当我启用无cookie会话时,事情就会出错。我的脚本输出以下值:
- Request.Url显示为http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl显示为/actPathPath/index.aspx
- document.location显示为http://www.foobar.com/actualPath/index.aspx
- 地址栏中的URL以某种方式被改变,因此显示为:
http://www.foobar.com/(S(SESSIONID))/actualPath/index.aspx
但这是奇怪的事情 - 页面的OnLoad事件只发射一次。那么这里发生了什么? .NET是否正在进行页面重定向,但在OnLoad事件发生之前有可能触发?
我想要做的是将rewrittenPath保留在地址栏中。我想document.location返回rewrittenPath。我想Request.RawUrl返回rewrittenPath。这是否可以使用无cookie会话?或者.NET的无cookie会话机制是否使这种行为变得不可能?
感谢您的时间和帮助。
答案 0 :(得分:1)
无Cookie会话只是将会话ID放在URL而不是会话cookie中。因此,URLRewriter.NET的URL映射需要考虑此行为。你在做这个吗?如果您希望能够在有或没有cookie的情况下运行,我希望您有规则来匹配cookie和无Cookie的URL模式。