您的位置:首页 > 编程语言 > ASP

Asp.net MVC 用户在线简单实现及单点登陆扩展(一)

2010-02-05 17:06 691 查看
首先,让我们想来思考如何实现在线用户的统计,这里我将使用IHttpModule扩展我们的在线用户模块。

创建我们需要的实体类

代码

public class OnlineFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string findName = filterContext.HttpContext.User.Identity.Name;
bool isGuest = false;

if (filterContext.HttpContext.User.Identity.IsAuthenticated)
findName = filterContext.HttpContext.User.Identity.Name;
else
{
findName = filterContext.HttpContext.Session.SessionID.ToUpper();
isGuest = true;
}

Models.OnlineUser userModel = UserOnlineModule.OnlineList.Find(p =>
p.UserName.Equals(findName, StringComparison.CurrentCultureIgnoreCase));

if (userModel == null)
{
userModel = new Models.OnlineUser();
userModel.UserName = findName;
userModel.LoginTime = DateTime.Now;
userModel.LastTime = DateTime.Now;
userModel.LoginIp = filterContext.HttpContext.Request.UserHostAddress;
userModel.LastActionUrl = filterContext.HttpContext.Request.Url.PathAndQuery;
userModel.SessionID = filterContext.HttpContext.Session.SessionID.ToUpper();
userModel.IsGuest = isGuest;
UserOnlineModule.OnlineList.Add(userModel);

}
else
{
userModel.LastTime = DateTime.Now;
userModel.LastActionUrl = filterContext.HttpContext.Request.Url.PathAndQuery;

}
}

对了,忘记一个很重要的事,那就是注册我们的IHttpModule,打开Web.config页面,找到<httpModules>节,添加

<add name="OnlineList" type="命名空间.UserOnlineModule"/>

就这么简单的实现了在线用户的统计,现在来看看使用

[OnlineFilter]
public ActionResult Index(string id)
{
return View();
}

你可以这样简单的在Action上进行Filter的标注,如果你有一个Controller都需要进行在线统计,那么你可以直接在整个Controller上标注一个就可以了。很简单吧。

下一篇将介绍一下利用这个简单的在线用户实现进行单点登陆限制,其实很多朋友可能已经知道该怎么做了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: