我正在使用ASP.NET Identity 2来管理用户,并想知道UserManager是否有可用的功能来检查特定用户当前是否已经过身份验证或登录。我的意思是,对于站点管理员来说,检查给定用户是否已登录。我知道,User.Identity.IsAuthenticated仅适用于当前的HTTP请求。我该怎么办呢?
答案 0 :(得分:2)
不,基本身份2.0中没有跟踪当前登录用户的功能,您必须自己添加。由于MVC的工作方式(实际上是因为HTTP的无状态),服务器永远无法确定客户端是否已登录。
在最基本的层面上,正在"登录"可以定义为来自何时:
直到出现以下任何一种情况:
用户点击退出链接
身份验证票证Cookie过期或被删除
由于票证存在于客户端,因此服务器仅确切知道用户在第一种情况下何时注销。在第二种情况下,它只知道何时发出来自该客户端的下一个HTTP请求。除非您使用某些背景AJAX轮询或其他客户端服务器通信(如SignalR),否则如果客户端处于空闲状态,或者他们已关闭浏览器或转移到其他页面,则服务器不会知道区别。
如果您热衷于自己跟踪此问题,则必须扩展IdentityUser
课程,以添加用户上次登录或活动的时间戳(并更新)每次用户发出请求时都会显示此信息,然后将其与当前时间进行比较,然后确定在特定时间范围内没有活动的用户将被视为已注销。例如,您可以确定在过去30分钟内未与服务器联系的用户已退出"但是您将永远不会确切知道,除非他们实际经历了{ {1}}控制器方法。