asp.net 禁止用户二次登录(转)

问题:
用户(如Admin)只能在系统中只能一台工作站登录,第二台登录时,自动注销第一台工作站的用户,我现在是用Application和Session来实现的,代码如下:

登录时:
if(Application[Session["UserID"].ToString ()]!=null)
{
Application[Session["UserID"].ToString ()]=DateTime.Now.ToLongTimeString ();
Session["LoginTime"]=Application[Session["UserID"].ToString ()].ToString ();

}
else
{
Application[Session["UserID"].ToString ()]=DateTime.Now.ToShortDateString ();
Session["LoginTime"]=Application[Session["UserID"].ToString ()].ToString ();
}
Response.Redirect ("Bill.aspx");
页面检查:
if(Application[Session["UserID"].ToString ()].ToString() !=Session["LoginTime"].ToString ())
{
sharecode.OutMsgBox ("用户 "+Session["UserName"].ToString ()+" 在别处登录,您已经自动注销!","logout.aspx");
}
现在的问题是,在Session_End事件中,并不能清空Application[Session["UserID"].ToString ()]的值,因为Session在我关闭IE时根本没有触发(郁闷)
请各位大虾给予帮助,不胜感激!

给你一个参考,是用来禁止第二次登入的,不是第二次登入踢出第一次的。
步骤1:在Application_Start事件中,加入下列代码,以建立一个应用程序级的登表:
DataTable DT=new DataTable();
DT.Columns.Add("UID",typeof(string));
DataColumn[] PK=new DataColumn[1];
PK[0]=DT.Columns["UID"];
DT.PrimaryKey=PK;
Application["DT"]=DT;
步骤2:在用户登录页面中(也可以Session_Start事件中)加入下列代码,判断用户是否在线,如果在线就不允许登录,不在线就将用户ID写入登录表:
if(((DataTable)Application["DT"]).Rows.Count>0){

if(((DataTable)Application["DT"]).Rows.Contains(uid.Text.Trim())){
Page.RegisterStartupScript("","<script>alert('对不起,已登录!');</script>");
return;
}



else{
Application.Lock();
DataRow Row=((DataTable)Application["DT"]).NewRow();
Row["UID"]=(string)Session["uid"];
((DataTable)Application["DT"]).Rows.Add(Row);
Application.UnLock();
}
}
步骤3:在Session_End事件中,注销用户:
Application.Lock();
for(int i=0;i<((DataTable)Application["DT"]).Rows.Count;i++){
DataRow Row=((DataTable)Application["DT"]).Rows[i];
if(Row["UID"].ToString()==Session["uid"].ToString()){
Row.Delete();
}
}
Application.UnLock();
posted @ 2007-03-13 14:43  微雨杏花村  阅读(564)  评论(0编辑  收藏  举报