我有一个asp.net核心项目。应用程序中存在两个角色。可以在站点中执行的具有受限访问权限的用户角色,以及可以在站点和管理面板中执行的具有完全访问权限的管理角色 出于某些安全原因,我希望管理员闲置超时(约30分钟),用户角色超时1天。 对于用户角色作为默认值我设置此代码
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromDays(1);
options.CookieName = "Session";
});
如何配置管理员角色IdleTimeout?
答案 0 :(得分:1)
简单地说,你不能。会话超时是全局的。但是,您可以在其上实现一个手动超时会话的图层。例如,当会话启动时,您可以添加具有当前日期和时间的会话变量。然后,您可以添加一个全局操作筛选器来检查此会话var,并将datetime与特定用户角色的自定义超时进行比较。如果已超出自定义超时,则可以手动销毁会话(Session.Abandon()
)。为了使其正常工作,您的全局会话超时必须是可能的最长超时(可能是对于管理员),然后您的自定义超时将适用于具有较短超时时间的任何角色。
答案 1 :(得分:0)
我想应修改SessionMiddleware以设置不同会话的空闲时间。
说明:
AddSession
在DI中将SessionOptions
对象注册为单身。该对象被注入SessionMiddleware
。不幸的是,它被注入一个构造函数中。正如我们know,在app启动时构建了一个中间件。每次请求依赖项注入仅适用于Invoke
方法,而SessionMiddleware
不允许Invoke
方法接受SessionOptions
。
所以计划是:
SessionMiddleware
并实施Invoke(HttpContext, SessionOptions)
方法。AddSession
来电后,replace SessionOptions
注册。例如:
services.Replace(new ServiceDescriptor(typeof(SessionOptions),
provider =>
{
//you could resolve another dependencies here and determine user's role.
var service = provider.GetService<FooService>();
return new SessionOptions();
},
ServiceLifetime.Scoped));