0

我正在使用 ASP.NET Identity 2 来管理用户,并且想知道是否有通过 UserManager 提供的功能来检查特定用户当前是否已通过身份验证或登录。我的意思是,让网站管理员检查给定用户是否登录。我知道,User.Identity.IsAuthenticated 仅适用于当前的 HTTP 请求。否则我该如何实施呢?

4

1 回答 1

2

不,基础 Identity 2.0 中没有跟踪当前登录用户的功能,您必须自己添加。由于 MVC 的工作方式(实际上是因为 HTTP 的无状态性),服务器永远无法确定客户端是否登录。

在最基本的层面上,“登录”可以定义为从以下时间开始:

  • 用户通过身份验证,身份验证票据作为cookie写入浏览器

直到发生以下任一情况:

  • 用户单击注销链接

  • 身份验证票据 cookie 过期或被删除

由于票证存在于客户端,因此在第一种情况下,服务器仅知道用户何时注销。在第二种情况下,它只知道来自该客户端的下一个 HTTP 请求何时发出。除非您使用一些后台 AJAX 轮询或其他客户端服务器通信(如 SignalR),否则如果客户端只是闲置,或者他们已经关闭浏览器或移动到另一个页面,服务器将不会知道差异。

如果您热衷于自己跟踪这一点,则必须扩展IdentityUser该类以添加用户上次登录或活动的时间戳(并在每次用户发出请求时更新此信息),然后将其与当前时间,然后决定在一定时间内没有活动的用户将被视为已注销。例如,您可能确定在过去 30 分钟内未联系服务器的用户已“注销”,但除非他们实际通过Account\Logout控制器方法,否则您永远无法确定。

于 2014-05-22T22:40:28.027 回答