2

我在负载均衡器后面的两台服务器上设置了同一个站点。我的 web.config 文件中有以下内容

<sessionState mode="SQLServer" cookieless="false" allowCustomSqlDatabase="true" 
sqlConnectionString="Data Source=server;Initial Catalog=ASPState;Persist Security 
Info=True;User ID=user;Password=password" timeout="2880" sqlCommandTimeout="10" />

它似乎正在工作,我可以看到登录时填充的 ASPState 表,但是我看到如果我在登录后刷新几次,它会在登录和未登录之间来回切换,具体取决于我点击的服务器。我错过了什么吗?

我正在使用 MVC 4 中内置的默认 webmatrix 身份验证。

4

2 回答 2

3

这可能是因为您的服务器上有不同的MachineKey或具有默认值。因此,您的身份验证 cookie 以两种不同的方式加密。

尝试在 web.config 中设置 machineKey。这是帮助生成 machineKey http://aspnetresources.com/tools/machineKey的工具

于 2012-12-23T09:43:04.067 回答
2

正如这篇文章所解释的,您需要在两台服务器上拥有相同的应用程序 ID。

“当您创建希望使用 Sql Server 共享会话状态的应用程序时,它们需要在 IIS 中配置相同的 ID。这是因为生成的会话 ID 是根据应用程序 ID 生成的。(内部应用程序 ID 类似于LM/W3SVC/1 两台服务器在 IIS 中的每个应用程序都有不同的 ID。解决方法是在每台服务器的“管理网站 -> 高级设置”下更改 ID。”

干杯

于 2012-12-23T13:05:49.523 回答