【C#】ASP.NET网页中添加单点登录功能
2024-08-26 08:17:02
背景
首先,要说明的是,原先需求定义的是,同一个账号只能同时有一个人来登录,如果另外一个登录的话,前一个登陆者就自动被踢掉。本来原先要做成存储到服务器的数据库中,但是后来如果是非正常退出的话 下次就没法登录,这下就上网找资料 改了以后就有了下面的东东了。
登陆页后台
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: 这段代码就是判断依据。
结果演示
最新文章
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
- RTSP协议转换RTMP直播协议
- PHP的学习--cookie和session
- atitit.提升软件开发的效率and 质量的那些强大概念and方法总结
- reactjs入门到实战(六)---- ReactJS组件API详解
- 应注意的Flex&;Bison潜规则
- 【Python】分布式任务队列Celery使用参考资料
- &; 和 &;&; 区别
- CMake VS工程总结
- Qt Creator编译运行成功,但是显示系统找不到指定的文件(比如urlmon.dll动态链接库)
- ArcGIS API for JavaScript 中的数据类型【vs】GPServer的数据类型
- Bom部分
- web框架之Django基础
- Java基础学习(五)-- Java中常用的工具类、枚举、Java中的单例模式之详解
- Go 语言条件语句
- python日期格式化操作
- 使用 SonarQube 来分析 .NET Core 项目代码问题
- vlc-ts
- CFRunLoop 源码学习笔记(CF-1151.16)
- linux配置redis三种启动方式