2011-06-25 70 views
1

我們的網站有一個針對國家的DropDownList和一個針對語言的DropDownList。 點擊這些材料的組合時,我們將用戶重定向到一個國家/語言特定的URL,像en-us.mysite.comasp.net:會話在response.redirect上清除?

重定向發生在ButtonClick用戶控件(用戶控件是在一個地方MasterPage),但是當用戶被重定向時,當我們在global.asax中檢查它們時會話變量被清除(在newdomain的請求中)

這會發生在'responseend'參數的true和false Response.Redirect函數。

是這樣設計的嗎?

(這是在本地主機上的方式,在主機指定的子域在我的機器上的文件)

回答

3

該會話將被清除,因爲該cookie跟蹤會話丟失,因爲你穿越域。

所以是的 - 這是通過設計。不是會話設計,而是cookie設計。

但我相信你可以允許Cookie在多個子站點共享,就像這樣:

Response.Cookies["domain"].Domain = "mysite.com"; 

Making it available to: 

en-us.mysite.com

en-au.mysite.com 
foo.mystie.com 
etc 

但是,將無法解決您的問題,因爲您無法控制ASP.NET Session Cookie。

所以你將不得不實現你自己的自定義會話機制,我沒有這樣做不能提供太多的幫助。

+1

謝謝謝謝謝謝你指出了這一點。現在我可以停止調試並嘗試考慮新的解決方案,因爲我知道問題在哪裏。 – Michel

+0

確實遇到了另一個問題,即我的Cookie未被保存......現在知道爲什麼:-) – Michel

1

正如RPM1984所說,這是因爲你正在穿越領域。但是,如果您要傳遞會話變量並在下一個請求中再次設置該變量,則可以恢復同一會話,假定它將是處理第二個域的同一個應用程序。

你可以做的是,在OnAuthenticateRequest鉤和手動設置

Request.Cookies.Add(new HttpCookie("ASP.NET_SessionId", Request.Form["s"]);) 

(我不記得什麼會話cookie被命名,或者如果它是可配置的,它應該是可能ATLEAST實際設置它不知何故)

這假設你發佈會話id在一個名爲「s」的變量,但你可以找出一個更好的解決方法。