在全局过滤器中使用会话变量

时间:2013-01-23 21:50:23

标签: c# asp.net-mvc

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

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,该应用程序运行正常。这很奇怪,因为给出的错误完全不相关(我认为)。在这种情况下,如何让我的会话变量起作用?更好的问题,这是进行用户身份验证的正确方法吗?

1 个答案:

答案 0 :(得分:3)

您的应用程序似乎已配置为使用SQL Server session 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>