在全局过滤器中使用会话变量
本文关键字:会话 变量 全局 过滤器 | 更新日期: 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>