最近找了一些单点登录的,发现了这篇文章,貌似还是可以实现的,先保存了。
Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法:
将登录后的用户名放到数据库表中;
登录后的用户名放到Session中;
登录后的用户名放到Application中;
登录后的用户名放到Cache中。
一般的这几种方法都是登录了之后,如果没有正常退出,第二次登录将不被允许。这样一般都会存在一个问题:如果用户没有正常退出系统,那么他接下来继续登录的时候,因为Session没有过期等问题,会被拒绝继续登录系统,只能等待Session过期后才能登录。本文介绍的方法是采用类似于MSN登陆的方法,第二次登录时会把第一次的登录注销掉,第一次登录将会类似于MSN弹出:您的帐号已在别处被登录,您被强迫下线的提示信息。<wbr><br><span style="line-height:1.3em">功能实现起来也比较简单:</span><wbr><br><span style="line-height:1.3em">登录用户名密码验证通过之后输入以下代码:</span><wbr><br><span style="line-height:1.3em"></span><textarea class="csharp" readonly name="code">Hashtable hOnline = (Hashtable)Application["Online"];
if(hOnline != null)
{
IDictionaryEnumerator idE = hOnline.GetEnumerator();
string strKey = "";
while(idE.MoveNext())
{
if(idE.Value != null && idE.Value.ToString().Equals(UserID))
{
//already login
strKey = idE.Key.ToString();
hOnline[strKey] = "XXXXXX";
break;
}
}
}
else
{
hOnline = new Hashtable();
}
hOnline[Session.SessionID] = UserID;
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock(); </textarea></wbr></wbr></wbr>
用户登录的时候将登录用户名放在一个全局变量Online,Online为Hashtable结构,Key为SessionID,Value为用户名。每次用户登录时均判断以下要登录的用户名在Online中是不是已经存在,如果存在该用户名已经被登录,将第一个人登录的SessionID对应的用户名强制变更为XXXXXX,表示该登录将被强制注销。<wbr><br><span style="line-height:1.3em">建立一个CommonPage页,系统中所有的页面都继承于CommonPage页,在CommonPage页的后台代码中添加如下代码:</span><wbr><br><span style="line-height:1.3em"></span><textarea class="csharp" readonly name="code">override protected void OnInit(EventArgs e)
{
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();
MessageBox("你的帐号已在别处登录,您被强迫下线!",Login.aspx);
return false;
}
break;
}
}
}
} </textarea></wbr></wbr>
继承于CommonPage的页面在刷新时都要执行重载的OnInit中的代码,取出Online,找到该用户对应的SessionID,判断SessionID里对应的用户名是否变更,如果变更,就强迫下线,清掉Session,转到Login画面。<wbr><br><span style="line-height:1.3em">最后需要在Session过期或者退出系统时释放资源,在Global.asax文件中的Session_End中添加如下代码:</span><wbr><br><span style="line-height:1.3em"></span><textarea class="csharp" readonly name="code">Hashtable hOnline = (Hashtable)Application["Online"];
if(hOnline[Session.SessionID] != null)
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
} </textarea></wbr></wbr>
如果用户不正常退出后重登录,因为重登录的优先级大,不会影响用户的登录,而不正常退出的用户占用的资源会在Session过期后自动清除,不会影响系统的性能。
为保证WEB系统安全,需要具有单点登录检测功能,Google了一下做了小小修改。
1)<wbr>密码验证后:</wbr>
2)<wbr>建立一个CommonPage页,系统中所有的页面都继承于CommonPage页(<span style="color:#ff9900; line-height:1.3em">public partial class index : CommonPage</span><wbr>),在CommonPage页的后台代码中添加如下代码:</wbr></wbr>
继承于CommonPage的页面在刷新时都要执行重载的OnInit中的代码,取出Online,找到该用户对应的SessionID,判断SessionID里对应的用户名是否变更,如果变更,就强迫下线,清掉Session,转到Login画面。
3)<wbr>最后需要在Session过期或者退出系统时释放资源,在Global.asax文件中的Session_End中添加如下代码:<br><textarea class="csharp" readonly name="code">Hashtable hOnline = (Hashtable)Application["Online"];
if(hOnline[Session.SessionID] != null)
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
} </textarea></wbr>
分享到:
相关推荐
基于portal的单点登录系统,系统由CS服务端和BS服务系统组成,一般用户可以通过IE来访问单点...这里只有CS程序及说明,BS程序可以找资源名称:单点登录系统(BS程序),rt.jar可以找资源名称:单点登录系统(rt.jar)。
然后单点登录服务程序验证没有问题,将信息同步给防火墙,防火墙也会找域控服务器验证,整理自己的本地在线用户。 华为防火墙单点登录所使用的ADSSO程序,可以通过图中所示的配置结果进行了解。从图中不难看出,单...
因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。
那就意味着做单点登录咯,至于不知道什么是单点登录的同学,建议去找一下万能的度娘。 刚接到这个需求的时候,老夫心里便不屑的认为:区区登录何足挂齿,但是,开发的过程狠狠的打了我一巴掌(火辣辣的一巴掌)。。...
网页单点登录金蝶k3客户端源码,旗舰版应该可用。有点瑕疵,但比百度中能找到的代码应该更全面点,涉及到注册表数据修改,没有修改注册表的话,会打不开财务会计的报表。瑕疵指需要固定登录人的密码,不能随便修改,...
基于portal的单点登录系统,系统由CS服务端和BS服务系统组成,一般用户可以通过IE...这里只有BS程序(除rt.jar),CS程序可以找资源名称:单点登录系统(CS程序下载),rt.jar可以找资源名称:单点登录系统(rt.jar)。
单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...
### RTX单点登录及其配置详解 #### 一、配置环境 为了实现RTX的单点登录功能,首先需要按照以下步骤完成环境的配置: 1. **安装RTX2008 Server SDK包**: - 首先确保开发机器上已经安装了RTX2008 Server SDK包。 ...
基于portal的单点登录系统,系统由CS服务端和BS服务系统组成,一般用户可以通过IE来访问单点登录...这里只有rt.jar,CS程序可以找资源名称:单点登录系统(CS程序),BS程序可以找资源名称:单点登录系统(BS程序)。
《SANGFOR AC WEB单点登录配置详解》 在企业网络环境中,为了提供高效便捷的访问体验,单点登录(Single Sign-On, SSO)技术被广泛应用。SANGFOR AC(Access Controller)作为网络访问控制设备,其Web单点登录功能...
用友NC6x单点登录实现——跳转到浏览器或Uclient-附件资源
这个我找了很久,还是没找到,最后在维普上花了3元钱买了这篇文章,图文齐全。共享下。
SSO,全称为Single Sign-On,即单点登录,是一种网络认证机制,允许用户在一个系统中登录后,无须再次认证就能访问其他相互信任的系统。这种机制简化了用户登录多系统的操作流程,提高了用户体验。以下是对SSO单点...
然后,我们需要解析HTML文档,找出登录表单的相关信息,如form标签、input标签,它们分别代表了表单和输入字段。input标签的type属性可以告诉我们输入字段的类型,如text(文本)、password(密码)等。同时,我们还...
以下是关于这个主题的一些关键知识点: 1. **冒险岛游戏**:《冒险岛》是由韩国Nexon公司开发的一款2D卷轴式横版动作冒险游戏,以其独特的卡通风格、丰富的职业系统和多样化的游戏玩法吸引了大量玩家。 2. **HS卡...
基于SpringBoot + Vue 开发的,,使用uni-app开发微信小程序,支持微信登录、Redis缓存、quartz定时、导出数据等功能。 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取...
今天遇到一个项目问题,shiro如何实现一个账户同一时刻只有一session存在的问题,找了几篇文章,在这里就把核心的代码理了理,具体情况如下。 1.假设你使用了Apache shrio ,项目要求一个账户同一时刻只能有一个用户...
在实际操作中,我们可能还需要考虑一些高级特性,例如刷新令牌、令牌过期策略、单点登录(SSO)以及JWT(JSON Web Tokens)的使用。JWT可以减少与授权服务器的交互次数,提高系统性能。在Spring Boot中,可以使用...
4. **用户行为分析**:对于用户体验(UX)设计,界面录制可以帮助设计师了解用户在实际使用中的行为模式,找出可能的痛点或优化空间。 5. **错误报告**:当用户报告问题时,如果能够提供录制的界面操作视频或脚本,...