我正在使用 ASP.NET Identity 2 来管理用户,并且想知道是否有通过 UserManager 提供的功能来检查特定用户当前是否已通过身份验证或登录。我的意思是,让网站管理员检查给定用户是否登录。我知道,User.Identity.IsAuthenticated 仅适用于当前的 HTTP 请求。否则我该如何实施呢?
问问题
1697 次
1 回答
2
不,基础 Identity 2.0 中没有跟踪当前登录用户的功能,您必须自己添加。由于 MVC 的工作方式(实际上是因为 HTTP 的无状态性),服务器永远无法确定客户端是否登录。
在最基本的层面上,“登录”可以定义为从以下时间开始:
- 用户通过身份验证,身份验证票据作为cookie写入浏览器
直到发生以下任一情况:
用户单击注销链接
身份验证票据 cookie 过期或被删除
由于票证存在于客户端,因此在第一种情况下,服务器仅知道用户何时注销。在第二种情况下,它只知道来自该客户端的下一个 HTTP 请求何时发出。除非您使用一些后台 AJAX 轮询或其他客户端服务器通信(如 SignalR),否则如果客户端只是闲置,或者他们已经关闭浏览器或移动到另一个页面,服务器将不会知道差异。
如果您热衷于自己跟踪这一点,则必须扩展IdentityUser
该类以添加用户上次登录或活动的时间戳(并在每次用户发出请求时更新此信息),然后将其与当前时间,然后决定在一定时间内没有活动的用户将被视为已注销。例如,您可能确定在过去 30 分钟内未联系服务器的用户已“注销”,但除非他们实际通过Account\Logout
控制器方法,否则您永远无法确定。
于 2014-05-22T22:40:28.027 回答