2009-07-23 18 views
4

我正在使用Intelligencia's URL Rewriter .NET HTTPModule重寫URL。我正在使用其自定義變換功能,該功能允許我提供包含執行實際URL變換的方法的程序集。.NET中的URL重寫對於無Cookie會話的行爲非常不利

我開啓了無Cookie會話,這對URL重寫器造成了一些干擾。

所以,讓我們說,我的服務器上的路徑是這樣的:
http://www.foobar.com/actualPath/index.aspx

但我想使用URL重寫,使路徑是這樣的:
http://www.foobar.com/rewrittenPath/index.aspx

我做了一個腳本輸出以下內容:
- Request.Url(從我的代碼隱藏)
- Request.RawUrl(從我的代碼隱藏)
- document.location(from 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的地址酒吧保持不變,從我原本輸入英寸

但是,當我啓用cookieless會話,事情出錯。我的腳本輸出以下值:
- Request.Url顯示爲http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl顯示爲/actualPath/index.aspx
- document.location顯示爲http://www.foobar.com/actualPath/index.aspx
- 該URL的地址扎因某種原因改變了,所以它顯示爲:
http://www.foobar.com/(S(SESSIONID))/actualPath/index.aspx

但是,這是奇怪的事情 - 在頁面永遠只能觸發一次OnLoad事件。那麼這裏發生了什麼? .NET是否做頁面重定向,但是在OnLoad事件有機會觸發之前這樣做?

我想要做的是保持rewritePath在地址欄中。我想document.location返回rewritePath。我希望Request.RawUrl返回rewritePath。這可能與無cookie會話?或者.NET的無cookie會話機制使這種行爲變得不可能?

謝謝你的時間和幫助。

回答

1

無Cookie會話只是將會話ID放入URL而不是會話cookie中。因此,URLRewriter.NET的URL映射需要考慮這種行爲。你在做這個嗎?如果您希望能夠使用或不使用Cookie,我希望您有相應的規則來匹配Cookie和無Cookie的網址格式。

+1

那麼,我的網址映射是真的接受,不應該影響URL重寫。看來正在發生的事情是,.NET不僅僅將會話ID粘貼到URL中。它也在做某種頁面重定向到'實際'路徑(而不是重寫或'原始'路徑)。這會導致'實際'路徑出現在地址欄中,並且它會導致JavaScript具有'實際'路徑在document.location裏面。如果.NET只是將會話標識卡入'原始'路徑而不從'原始'路徑重定向到'實際'路徑,我希望它。你知道這是可能的嗎? – user44701 2009-07-24 00:05:26