0

我使用 InProc 模式在我的 mvc3 应用程序中存储会话,但由于大约每 20 分钟重新启动 IIS,因此更改了对 SQLServer 的存储身份验证。与数据库的连接很好,会话正在存储,但身份验证不会持续很长时间,重启后会丢失

网络配置

<sessionState mode="SQLServer" timeout="2880" allowCustomSqlDatabase="true"
    sqlConnectionString="data source=mydatasource;initial catalog=mydb;user id=userid;password=password;
integrated security=False;MultipleActiveResultSets=True;"
cookieless="true" />

<authentication mode="Forms">
        <forms loginUrl="~/Account/Login" timeout="2880" slidingExpiration="true" protection="All" cookieless="UseCookies"/>
    </authentication>

我的数据库截图

4

2 回答 2

0

好吧,我终于发现了真正的问题。我有 machineKey 的随机生成器,当重新启动 IIS 时,生成了新的 machineKey,所以我无法解密 auth cookie。解决方案很简单 -> 如果您的安全级别较低,请使用静态密钥

于 2013-03-15T18:56:06.113 回答
0

身份验证和会话是两个完全不同的东西:

  1. Forms Authentication
  2. ASP.NET Session

区分它们是非常重要的。第一个用于跟踪您网站上经过身份验证的用户。它<authentication>在您的 web.config 部分中配置,您可以在其中指定 cookie 的超时和有效性。

另一方面,ASP.NET Session 可以独立使用。表单身份验证。在您的示例中,您似乎在您的应用程序中同时使用了两者。因此,请确保它们都具有相同的超时值。

从我可以看到您已将 ASP.NET 会话的超时设置为 2880。确保您的表单身份验证 cookie 也配置为相同的数量:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

如果您没有使用表单身份验证,而是使用其他一些机制来跟踪您的身份验证用户,那么问题可能出在其他地方。

于 2013-03-14T08:17:49.150 回答