当使用子域名时正在重置的会话

问题描述:

我想在我的ASP.NET网站中使用子域,但我遇到了会话被重置的几个问题。当使用子域名时正在重置的会话

我编辑了我的主机文件以具有'localhost','one.localhost'和'two.localhost'。我可以去任何这些网址,并做我需要做的和登录到我的系统。会话模式在web.config中定义如下:

<sessionState cookieless="false" mode="SQLServer" timeout="300" 
     sqlConnectionString="Data Source=MyDatabase;user id=User1;password=pass"/> 

我正在使用SQLServer作为网站将作为webfarm运行。

我发现的是,当我点击导致回发所有会话丢失,并创建一个新的会话ID的东西,当发生这种情况时,我的网站现在'localhost',而不是登录'one.localhost ' 例如。

有谁知道可能是什么原因造成的?

干杯

你似乎有从你的问题会在几个问题:

  1. 交流会跨越多个子域的信息。
  2. 登录到多个域名。
  3. 在回发期间保持正确的域名。

要共享多个子域的会话信息,你需要的会话cookie写入正确的域,在这种情况下.example.com - 在这里看到的更多信息:"ASP.NET Session State, Cookies and Sub-domains"

如果你希望用户同时登录的所有领域,并且正在使用窗体身份验证,则可以使用forms elementdomain属性(注意在域路径超前时段):

<forms 
    name="name" 
    loginUrl="URL" 
    defaultUrl="URL" 
    domain=".example.com"> 
</forms> 

您需要在所有网站上进行配置。

至于你为什么被重定向到本地主机而不是回发one.localhost,你需要看看已经呈现的源代码(你是否包括一些基本的href信息,或者是你的表单明确回发到localhost而不是one.localhost)?查看浏览器正在做什么的好工具是Fiddler

最后,作为您在将其部署到多个服务器时的注意事项,请不要忘记所有站点上的configure your MachineKey以确保它们具有相同的值,以便它们可以解密会话,登录令牌,视图状态等正确。

基本上,域在登录的cookie是特定于one.localhost被设置。

有一些可能的黑客行为。见例如最后的答案this question

在登录/起始页,运行以下命令:

Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID; 
Response.Cookies["ASP.NET_SessionId"].Domain = ".mydomain.com"; 
+0

下面是另一个描述@Damien_The_Unbeliever更详细地发布的解决方案的链接。 http://www.know24。净/博客/ ASPNET +会话+国家+饼干+和+ Subdomains.aspx – dugas 2010-03-08 13:36:08