0

我正在使用全局过滤器来确定是否允许用户访问某个页面/控制器。由于无法创建简单的会话变量,因此我无法对此进行很多了解。这是我的简化代码:

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {

        context.HttpContext.Session.Add("asdfasdf", 1234);
        //Check if user is authorized in db
        //...

        base.OnActionExecuted(context);
    }
}

错误:

System.Web.HttpException: Failed to login to session state SQL server for user '<USERNAME>'.

如果我注释掉Session.Add应用程序工作正常。这很奇怪,因为给出的错误完全不相关(我认为)。在这种情况下如何让我的会话变量工作?更好的问题,这是进行用户身份验证的正确方法吗?

4

1 回答 1

3

您的应用程序似乎配置为使用 SQL Serversession state持久性。而且您的 web.config 中的连接字符串有问题。

如果要使用 SQL Server 会话状态持久性,请确保您拥有correctly configured数据库并为其指定正确的连接字符串:

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>

如果您不想使用 SQL Server 来持久化会话,您可以切换回 InProc 模式:

  <system.web>
    <sessionState mode="InProc" />
  </system.web>
</configuration>
于 2013-01-23T21:52:14.573 回答