当使用子域名时正在重置的会话
我想在我的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 ' 例如。
有谁知道可能是什么原因造成的?
干杯
你似乎有从你的问题会在几个问题:
- 交流会跨越多个子域的信息。
- 登录到多个域名。
- 在回发期间保持正确的域名。
要共享多个子域的会话信息,你需要的会话cookie写入正确的域,在这种情况下.example.com
- 在这里看到的更多信息:"ASP.NET Session State, Cookies and Sub-domains"。
如果你希望用户同时登录的所有领域,并且正在使用窗体身份验证,则可以使用forms element的domain
属性(注意在域路径超前时段):
<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";
下面是另一个描述@Damien_The_Unbeliever更详细地发布的解决方案的链接。 http://www.know24。净/博客/ ASPNET +会话+国家+饼干+和+ Subdomains.aspx – dugas 2010-03-08 13:36:08