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

本文关键字:会话 变量 全局 过滤器 | 更新日期: 2023-09-27 17:55:25

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

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

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

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