背景

  首先,要说明的是,原先需求定义的是,同一个账号只能同时有一个人来登录,如果另外一个登录的话,前一个登陆者就自动被踢掉。本来原先要做成存储到服务器的数据库中,但是后来如果是非正常退出的话 下次就没法登录,这下就上网找资料 改了以后就有了下面的东东了。

登陆页后台

Login.aspx.cs
//单点登录判断
Hashtable hOnline = (Hashtable)Application["Online"];
if (hOnline != null)
{
int i = ;
while (i < hOnline.Count) //因小BUG所以增加此判断,强制查询到底
{
IDictionaryEnumerator idE = hOnline.GetEnumerator();
string strKey = "";
while (idE.MoveNext())
{
if (idE.Value != null && idE.Value.ToString().Equals(userInfo[].UserId.ToString()))
{
//already login
strKey = idE.Key.ToString();
hOnline[strKey] = "XXXXXX";
break;
}
}
i = i + ;
}
}
else
{
hOnline = new Hashtable(); }
hOnline[Session.SessionID] = userInfo[].UserId;
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();

PS:这段代码可直接放入登录按钮里,在进行了密码正确与否后直接使用。

基础页后台(公共页)

asePage.aspx.cs

 //单点登录判断
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))
{
//already login
if (idE.Value != null && "XXXXXX".Equals(idE.Value.ToString()))
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
string js = "<script language=javascript>alert('{0}');parent.window.location = '{1}' </script>";//window.location.replace('{1}')
Response.Write(string.Format(js, "帐号已在别处登录 ,你将被强迫下线(请保管好自己的用户密码)!", ResolveClientUrl("~/Login.aspx")));
Session["UserInfo"] = null;
return;
}
break;
}
}
}

PS: 这段代码就是判断依据。

结果演示

最新文章

  1. 消息队列 Kafka 的基本知识及 .NET Core 客户端
  2. RTSP协议转换RTMP直播协议
  3. PHP的学习--cookie和session
  4. atitit.提升软件开发的效率and 质量的那些强大概念and方法总结
  5. reactjs入门到实战(六)---- ReactJS组件API详解
  6. 应注意的Flex&amp;Bison潜规则
  7. 【Python】分布式任务队列Celery使用参考资料
  8. &amp; 和 &amp;&amp; 区别
  9. CMake VS工程总结
  10. Qt Creator编译运行成功,但是显示系统找不到指定的文件(比如urlmon.dll动态链接库)
  11. ArcGIS API for JavaScript 中的数据类型【vs】GPServer的数据类型
  12. Bom部分
  13. web框架之Django基础
  14. Java基础学习(五)-- Java中常用的工具类、枚举、Java中的单例模式之详解
  15. Go 语言条件语句
  16. python日期格式化操作
  17. 使用 SonarQube 来分析 .NET Core 项目代码问题
  18. vlc-ts
  19. CFRunLoop 源码学习笔记(CF-1151.16)
  20. linux配置redis三种启动方式

热门文章

  1. HashBiMap
  2. Effective java笔记8--序列化
  3. [Java]获取Window界面的标题栏的高度大小
  4. 使用 Google Fonts 为网页添加美观字体
  5. CKEditor和IMCE构建drupal编辑器
  6. linux 常用端口列表
  7. C#调用其它语言(例如C++)DLL文件中函数的方法摘要
  8. 我来说说MVC过滤器
  9. win7启动出现蓝屏STOP: 0X0000007B
  10. arm tiny6410双网卡桥接问题