我们的网站有一个国家/地区的DropDownList和一个语言的DropDownList。 当点击这些组合时,我们会将用户重定向到国家/语言特定网址,例如en-us.mysite.com
重定向发生在用户控件的ButtonClick中(UserControl位于MasterPage中)但是当用户被重定向时,会在我们在global.asax中检查它们时清除会话变量(在newdomain的请求中) )
对于Response.Redirect函数中的'responseend'参数,同时发生true和false。
这是设计的吗?
(顺便说一下,这是在localhost上,我的机器上的hosts文件中指定了子域名)
答案 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”的变量中,但您可以找到更好的解决方法。