检查用户是否在线mvc4

时间:2015-02-19 16:43:56

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在使用MVC4,我想要做的是检查用户的朋友的状态,看看他们是否在线以进行聊天。我已经探索了WebSecurityMEmebership类,但看不到其中的任何功能。从IIS服务器获取会话是否必须执行某些操作?

提前致谢

2 个答案:

答案 0 :(得分:3)

MembershipUser.IsOnline Property但如果这没用,您可以使用signlR检查当前状态,并可能将其存储在某处。
另外,你可以每隔几分钟做一次ajax调用来检查用户状态并将其存储在某个地方。

答案 1 :(得分:3)

我建议你的一个可能的解决方案是创建一个全局过滤器,填充每个用户的LastActionTime字段,然后使用此字段来确定用户是否在线:

首先在DateTime?类中创建一个名为LastActionTime的{​​{1}}类型的新属性,以防您使用Code-First方法。如果您使用的是Database-First方法,只需在User表中添加可为空的DateTime列并更新您的本地模型。

Users

然后创建一个名为public class User { // ... public DateTime? LastActionTime { get; set; } // ... } 的新类,并实现它的LogUserActionTimeFilterOnActionExecuting方法。如果您有任何服务或DbContexts,请在类的构造函数中初始化它们。

OnActionExecuted

public class LogUserActionTimeFilter : IActionFilter { private readonly IUserAuthService userAuthService; public LogAdminRequestFilter() : this(new UserAuthService()) { } public LogAdminRequestFilter(IUserAuthService userAuthService) { this.userAuthService = userAuthService; } public void OnActionExecuting(ActionExecutingContext filterContext) { this.userAuthService.SaveCurrentTimeAsLastActionTime( filterContext.HttpContext.User.Identity.Name); } public void OnActionExecuted(ActionExecutedContext filterContext) { } } 方法只是将SaveCurrentTimeAsLastActionTime设置为给定用户的LastActionTime并保存更改。它应该很容易实现。

完成过滤后,您可以将其应用于特定操作,控制器(例如仅限聊天)或全局:

DateTime.Now

当您需要确定用户是否在线时,只需检查其public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new LogUserActionTimeFilter()); } } 列/属性,如果它在LastActionTime之前小于5分钟(例如),则可以考虑用户在线。