asp.net:会话清除response.redirect?

时间:2011-06-25 11:13:26

标签: c# asp.net

我们的网站有一个国家/地区的DropDownList和一个语言的DropDownList。 当点击这些组合时,我们会将用户重定向到国家/语言特定网址,例如en-us.mysite.com

重定向发生在用户控件的ButtonClick中(UserControl位于MasterPage中)但是当用户被重定向时,会在我们在global.asax中检查它们时清除会话变量(在newdomain的请求中) )

对于Response.Redirect函数中的'responseend'参数,

同时发生true和false。

这是设计的吗?

(顺便说一下,这是在localhost上,我的机器上的hosts文件中指定了子域名)

2 个答案:

答案 0 :(得分: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会话cookie。

所以你必须实现自己的自定义会话机制,我没有这样做,因此无法提供太多帮助。

答案 1 :(得分:1)

正如RPM1984所说,这是因为你正在跨域。但是,如果要传递会话变量并在下一个请求中再次设置它,则可以恢复相同的会话,假设它与处理第二个域的应用程序相同。

您可以在OnAuthenticateRequest挂钩中执行此操作并手动设置

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

(我不记得会话cookie的名称,或者它是否可配置。至少应该可以实际设置它)

这假设您将会话ID发布在名为“s”的变量中,但您可以找到更好的解决方法。