一种实现一个用户帐户不能同时登录的问题

来源:互联网 发布:外国人怎么在淘宝 编辑:程序博客网 时间:2024/05/22 13:11
//当前Session是否存在
if(System.Web.HttpContext.Current.Session!=null)
{
//用户是否登录
if(System.Web.HttpContext.Current.Session["UserId"]!=null)
{
//获取用户登录的SessionID,在登录页面设置,并判定两个ID是否是相同的,不同嘛则后来有人用你的帐号登录了。
if(Application["Session"+System.Web.HttpContext.Current.Session["UserId"].ToString()].ToString() !=System.Web.HttpContext.Current.Session.SessionID)
{
Response.Redirect("/otheroneLogin.html",true);
}
}
}
//在初始化Global中Hook
public Global()
{
this.PreRequestHandlerExecute += new System.EventHandler(this.Global_PreRequestHandlerExecute);
}
//登录时设定的代码
Application.Lock();
Application["Session"+Session["UserId"].ToString()]=Session.SessionID;
Application.UnLock();

==========================

在Init方法中添加以下代码:

context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);

为什么要在PreRequestHandlerExecute事件中进行处理呢,因为我需要将用户身份的信息存放在Session中,比如:用户名,用户的角色(使用字符串标明,比如:Administrator,Operator等)。而Session只有在AcquireRequestState事件之后才可以使用。而PreRequestHandlerExecute事件是在AcquireRequestState事件之后发生的。

void context_PreRequestHandlerExecute(object sender, EventArgs e)
{      
}