欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net下一个账号不允许多个用户同时在线,重复登陆的代码

程序员文章站 2024-03-07 12:34:15
方法一: 复制代码 代码如下: string skey = username.text.tostring().trim(); // 得到cache中的给定key的值 str...

方法一:

复制代码 代码如下:

string skey = username.text.tostring().trim(); // 得到cache中的给定key的值
string suser = convert.tostring(cache[skey]); // 检查是否存在
if (suser == null || suser == string.empty)
{
timespan sesstimeout = new timespan(0, 0, system.web.httpcontext.current.session.timeout, 0, 0);//取得session的过期时间
httpcontext.current.cache.insert(skey, skey, null, datetime.maxvalue, sesstimeout, system.web.caching.cacheitempriority.notremovable, null);//将值放入cache己方便单点登录
//成功登录
}
else if (cache[skey].tostring() == skey)//如果这个账号已经登录
{
clientscript.registerstartupscript(gettype(), "提示", "<script>alert('对不起,当前用户已经登录');</script>");
return;
}
else
{
session.abandon();//这段主要是为了避免不必要的错误导致不能登录
}

复制代码 代码如下:

//关闭浏览器或窗口时清空cache的方法.在主页面aspx文件中加入一个onunload事件.通过ajax清空honline中的session.sessionid
window.onunload=function(){
$.ajax({
type: "post",
   data:"skey="+skey;
url: "online.aspx"
});
}

online.aspx.cs代码
复制代码 代码如下:

protected void page_load(object sender, eventargs e)
{
    httpcontext.current.cache.remove(skey);
}
//在global.asax文件中的session_end方法里加入
//session过期后.清空honline中的session.sessionid
    hashtable honline = (hashtable)application["online"];
if (honline[session.sessionid] != null)
{
honline.remove(session.sessionid);
application.lock();
application["online"] = honline;
application.unlock();
}

方法二:
复制代码 代码如下:

//skey为登录用户名
if(applicationonline(username.text.tirm())){
hashtable honline = new hashtable();
honline[session.sessionid] = skey;
application.lock();
application["online"] = honline;
application.unlock();
}

public boolean applicationonline(string skey)
{
boolean flag = true;
hashtable honline = (hashtable)application["online"];
if (honline != null)
{
idictionaryenumerator ide = honline.getenumerator();
while (ide.movenext())
{
//if (ide.key != null && ide.key.tostring().equals(session.sessionid))
//{
if (ide.value != null && skey.equals(ide.value.tostring()))
{
flag = false;
}
break;
//}
}
}
return flag;
}

//关闭浏览器或窗口时清空session.sessionid的方法.在主页面aspx文件中加入一个onunload事件.通过ajax清空session.sessionid
window.onunload=function(){
$.ajax({
type: "post",
url: "online.aspx"
});
}

online.aspx.cs代码
复制代码 代码如下:

protected void page_load(object sender, eventargs e)
{
hashtable honline = (hashtable)application["online"];
if (honline[session.sessionid] != null)
{
honline.remove(session.sessionid);
application.lock();
application["online"] = honline;
application.unlock();
}
}