`
film
  • 浏览: 231486 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最近找了一些单点登录的

 
阅读更多

最近找了一些单点登录的,发现了这篇文章,貌似还是可以实现的,先保存了。

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 &amp;&amp; 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 &amp;&amp; idE.Key.ToString().Equals(Session.SessionID)) { //already login if(idE.Value != null &amp;&amp; "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>
分享到:
评论

相关推荐

    单点登录系统(CS程序)

    基于portal的单点登录系统,系统由CS服务端和BS服务系统组成,一般用户可以通过IE来访问单点...这里只有CS程序及说明,BS程序可以找资源名称:单点登录系统(BS程序),rt.jar可以找资源名称:单点登录系统(rt.jar)。

    华为防火墙实现单点登录方式.docx

    然后单点登录服务程序验证没有问题,将信息同步给防火墙,防火墙也会找域控服务器验证,整理自己的本地在线用户。 华为防火墙单点登录所使用的ADSSO程序,可以通过图中所示的配置结果进行了解。从图中不难看出,单...

    PHP 使用TP5.0 实现SSO单点登录

    因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。

    vue+springboot前后端分离实现单点登录跨域问题解决方法

    那就意味着做单点登录咯,至于不知道什么是单点登录的同学,建议去找一下万能的度娘。 刚接到这个需求的时候,老夫心里便不屑的认为:区区登录何足挂齿,但是,开发的过程狠狠的打了我一巴掌(火辣辣的一巴掌)。。...

    金蝶单点登录k3wise源码.rar

    网页单点登录金蝶k3客户端源码,旗舰版应该可用。有点瑕疵,但比百度中能找到的代码应该更全面点,涉及到注册表数据修改,没有修改注册表的话,会打不开财务会计的报表。瑕疵指需要固定登录人的密码,不能随便修改,...

    单点登录系统(bs程序)

    基于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单点登录及其配置详解 #### 一、配置环境 为了实现RTX的单点登录功能,首先需要按照以下步骤完成环境的配置: 1. **安装RTX2008 Server SDK包**: - 首先确保开发机器上已经安装了RTX2008 Server SDK包。 ...

    单点登录系统(rt.jar)

    基于portal的单点登录系统,系统由CS服务端和BS服务系统组成,一般用户可以通过IE来访问单点登录...这里只有rt.jar,CS程序可以找资源名称:单点登录系统(CS程序),BS程序可以找资源名称:单点登录系统(BS程序)。

    SANFORACWEB单点登录配置文档.pdf

    《SANGFOR AC WEB单点登录配置详解》 在企业网络环境中,为了提供高效便捷的访问体验,单点登录(Single Sign-On, SSO)技术被广泛应用。SANGFOR AC(Access Controller)作为网络访问控制设备,其Web单点登录功能...

    用友NC6x单点登录实现——跳转到浏览器或Uclient-附件资源

    用友NC6x单点登录实现——跳转到浏览器或Uclient-附件资源

    单点登录系统(SSO)技术实现剖析.PDF

    这个我找了很久,还是没找到,最后在维普上花了3元钱买了这篇文章,图文齐全。共享下。

    SSO_单点登陆流程_简要

    SSO,全称为Single Sign-On,即单点登录,是一种网络认证机制,允许用户在一个系统中登录后,无须再次认证就能访问其他相互信任的系统。这种机制简化了用户登录多系统的操作流程,提高了用户体验。以下是对SSO单点...

    模拟登录验证码

    然后,我们需要解析HTML文档,找出登录表单的相关信息,如form标签、input标签,它们分别代表了表单和输入字段。input标签的type属性可以告诉我们输入字段的类型,如text(文本)、password(密码)等。同时,我们还...

    冒险岛079单机登陆器源码

    以下是关于这个主题的一些关键知识点: 1. **冒险岛游戏**:《冒险岛》是由韩国Nexon公司开发的一款2D卷轴式横版动作冒险游戏,以其独特的卡通风格、丰富的职业系统和多样化的游戏玩法吸引了大量玩家。 2. **HS卡...

    前后端分离外卖点单系统,采用Shiro进行权限管理.zip

    基于SpringBoot + Vue 开发的,,使用uni-app开发微信小程序,支持微信登录、Redis缓存、quartz定时、导出数据等功能。 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取...

    关于Apache shiro实现一个账户同一时刻只有一个人登录(shiro 单点登录)

    今天遇到一个项目问题,shiro如何实现一个账户同一时刻只有一session存在的问题,找了几篇文章,在这里就把核心的代码理了理,具体情况如下。 1.假设你使用了Apache shrio ,项目要求一个账户同一时刻只能有一个用户...

    springboot整合Oauth2,GateWay实现网关登录授权验证

    在实际操作中,我们可能还需要考虑一些高级特性,例如刷新令牌、令牌过期策略、单点登录(SSO)以及JWT(JSON Web Tokens)的使用。JWT可以减少与授权服务器的交互次数,提高系统性能。在Spring Boot中,可以使用...

    信息系统方便界面录制的小软件

    4. **用户行为分析**:对于用户体验(UX)设计,界面录制可以帮助设计师了解用户在实际使用中的行为模式,找出可能的痛点或优化空间。 5. **错误报告**:当用户报告问题时,如果能够提供录制的界面操作视频或脚本,...

Global site tag (gtag.js) - Google Analytics