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();
}
}