根据a question I posted yesterday,我们网站的DNS结构已更改为循环DNS,它实际上在两个生产服务器之间来回切换。我们对两个prod服务器的web.config
都有:
<sessionState mode="SQLServer" ... >
指向同一个共享数据库machineKey
在两者之间是一致的(这是我昨天发布的主要内容)。<forms domain=".mydomain.com" ... >
标记当我们在网站上使用登录功能时,登录实际上会向第3个网站发出Web服务请求,该网站会对用户进行身份验证。如果生成的响应表明它是成功登录,那么我们使用FormsAuthentication
将用户登录到:
FormsAuthentication.SetAuthCookie(strUserID, true);
我们的问题是,在某些网页上我们看到我们已登录,有些则不是。这是否表明我们没有完成在两个prod服务器之间共享会话的最后一步,或者我们的SQL服务器会话数据库是否会被破坏?
提前致谢
更新: 我们用于确定用户是否已登录的代码非常基本:
HttpContext.Current.User.Identity.IsAuthenticated
更新2 :
当我点击prod1.mysite.com(或prod2.mysite.com)时,我会收到名为"ASP.NET_SessionId"
的Cookie,但是当我点击直播公共网址www.mysite.com时,我不知道这个曲奇饼。这是问题的一部分吗?
解决:
事实证明,我们在这里所做的一切都是正确的,并且由于Akamai的缓存配置,我们使用Akamai的实时网站被缓存在各个州。已确认在服务器之间共享您已登录的状态。
答案 0 :(得分:0)
你可以做的一件事就是使用Firefox的Firebug插件来确保在登录后按照预期将身份验证cookie发送到浏览器,尽管你看到你登录的某些页面我会期望情况就是这样。
要检查的另一件事是,域名已正确设置为身份验证cookie,并且它对您网站上的所有页面都有效
这通常在表单标记中的web.config中设置,如下所示,并且在Web场中的每个服务器上应该相同。
<authentication mode="Forms">
<forms name="yourAuthCookie" loginUrl="/login.aspx" protection="All" path="/" domain="mydomain.com" timeout="30"/>
</authentication>
如果这一切都正确,那么您的服务器之间的会话可能无法正确共享,尽管您在问题中描述的设置似乎涵盖了所需的设置。