【发布时间】:2016-01-06 08:14:07
【问题描述】:
我在登录时添加了一些自定义声明。
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
var accesses = _roleAccessRepository.GetAssignedAccess(roleId);
foreach (var access in accesses)
{
identity.AddClaim(new Claim("AccessCode", access));
}
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
它们工作得很好,直到我最近发现在某些不活动之后,我假设超过 30 分钟,这些声明都丢失了。但是用户仍处于登录状态。
当用户仍然登录时,我如何重新加载这些声明?
更新:它是如何发生的。
我登录了一个用户,然后在大约 30 分钟后再次打开它,然后退出。它没有被注销而是刷新了我的页面,没有任何声明。
【问题讨论】:
-
您是否使用状态服务器来处理会话状态?
-
我没有处理任何会话状态。
-
好的。在您的服务器上启用 Asp.net 会话状态服务并配置您的应用程序以使用它可能值得一看。如果不使用会话状态服务器或数据库来存储会话状态,它可能不会持续超过当您的应用程序在不活动后定期回收时。我有点困惑,为什么你会失去索赔而不是登录:/,我原以为是全有或全无
-
好的,谢谢您的信息。我不知道它是怎么发生的。我会更新描述。
-
@Coulton 这是 Asp.Net Identity 技巧,与会话无关,因为这里根本不使用会话。
标签: asp.net asp.net-mvc claims-based-identity asp.net-identity-2