技术贴:asp.net实现唯一账户在线 禁止同一帐号同时在线 asp.net实现您的帐号在别处登录,您已被迫下线!

原文 http://www.cnblogs.com/cdemo/p/3386534.html

技术要点:

Application 全局变量的使用

hashtable 的使用

Session 对应唯一sessionID 标志会话状态

webpage 继承 BasePage的技术 

整体比较简单,主要是思想

 

private void SetOnlineInfo(HttpContext context, string username)
        {
            Hashtable hOnline = (Hashtable)context.Application["Online"];//读取全局变量
            if (hOnline != null)
            {
                IDictionaryEnumerator idE = hOnline.GetEnumerator();
                string strKey = "";
                while (idE.MoveNext())
                {
                    if (idE.Value != null && idE.Value.ToString().Equals(username))//如果当前用户已经登录,
                    {
                        //already login
                        strKey = idE.Key.ToString();
                        hOnline[strKey] = "XX";//将当前用户已经在全局变量中的值设置为XX
                        break;
                    }
                }
            }
            else
            {
                hOnline = new Hashtable();
            }

            hOnline[context.Session.SessionID] = username;//初始化当前用户的
            context.Application.Lock();
            context.Application["Online"] = hOnline;
            context.Application.UnLock();
        }

protected void CheckOtherLogin(HttpContext context)
        {

            Hashtable hOnline = (Hashtable)Application["Online"];//获取已经存储的application值
            if (hOnline != null)
            {
                IDictionaryEnumerator idE = hOnline.GetEnumerator();
                while (idE.MoveNext())
                {
                    if (idE.Key != null && idE.Key.ToString().Equals(context.Session.SessionID))
                    {
                        //already login
                        if (idE.Value != null && "XX".Equals(idE.Value.ToString()))//说明在别处登录
                        {
                            hOnline.Remove(Session.SessionID);
                            context.Application.Lock();
                            context.Application["Online"] = hOnline;
                            context.Application.UnLock();
                            context.Response.Write("<script>alert('你的帐号已在别处登陆,你被强迫下线!');window.location.href='login.aspx';</script>");//退出当前到登录页面
                            context.Response.End();
                        }
                    }
                }
            }
        }

 demo源码下载 

时间: 2024-09-30 20:36:56

技术贴:asp.net实现唯一账户在线 禁止同一帐号同时在线 asp.net实现您的帐号在别处登录,您已被迫下线!的相关文章

js-离线的QQ在线客服还显示彩色在线图表,如何解决?

问题描述 离线的QQ在线客服还显示彩色在线图表,如何解决? 如题,我用的是QQ推广工具里面QQ客服功能,用的是一下代码: <a target=""_blank"" href=""http://wpa.qq.com/msgrd?v=3&uin=12345678&site=qq&menu=yes""> <img border=""0"" src=&q

其社交网络内容管理平台,可以在社交网络上有效的开展在线营销活动,并且进行在线品牌管理

据科技博客TechCrunch报道,两年前成立于旧金山的新创公司Thismoment,致力于为企业级客户提供社交网络内容管理平台,通过这个平台客户可以在社交网络上有效的开展在线营销活动,并且进行在线品牌管理. 为了不断的扩大业务规模,Thismoment公司一直尝试进行融资.近日,Thismoment公司官方宣布,它们已经在C轮融资中成功获得2200万美元的投资.本轮融资由创投公司Trident Capital牵头,另外 Thismoment公司之前的投资也参与了本轮融资,包括:投资公司Sier

考试系统 百人 延迟-.net开发的在线考试系统,英语考试在线播放英语听力(mp3)网络延迟卡顿,,)

问题描述 .net开发的在线考试系统,英语考试在线播放英语听力(mp3)网络延迟卡顿,,) 网络已经由原来的百兆改为前兆网口,但是对于几百人的考试依然无法应付,超过百人同事登录读取听力系统将会卡死,求详细解决方案,不详细至少对路,好好答,谢谢大家了. 解决方案 可以使用多个服务器,你的主程序随机分配地址到每个服务器. 解决方案二: 在线考试(3)数据库设计之在线考试系统 解决方案三: 首先要确定你的问题主要是带宽的问题,还是服务端并发处理不过来导致的卡死. 以下几点建议参考: 1.建议压缩音频文

解决方案-php 中curl 35号错误,在线等大神解决

问题描述 php 中curl 35号错误,在线等大神解决 如图,结果返回的信息是求解决方案 解决方案 CURLE_SSL_CONNECT_ERROR (35) A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be cer

用ASP.NET可以实现类似人人网的消息推送和在线会话吗?

问题描述 类似于人人网,各种应用的消息或者系统消息即时通知用户,这样的功能是怎么设计实现的?此外人人网那个在线会话的功能是怎么实现的?可以在登录过的多个页面中同时都出现? 解决方案 解决方案二:一个是数据库需要设计在就是拿js实现每隔几秒时间发送一次ajax请求查询用于记录用户消息的记录!需要两张表!并且向关联解决方案三:我的初步想法是构造一个通用的消息池,各个应用如果有消息得话就放到消息池中,用户定期查询这个消息池.这个消息池,主要包括两个部分一个是消息的内容,一个是处理这个消息得页面地址不知

VISTA下如何重建ASP.NET Machine Account账户?紧急!

问题描述 系统vista旗舰,开发环境vs2008.netframework3.5sp1(实际使用2.0)数据库sql2005iis6.0做好了网站,也写好了数据库.但是现在问题是vs与数据库无法连接.在数据库安全性-登录名之中,无法找到ASP.NETMachineAccount账户.系统用户和组中也没有,iis中也没有.可能是因为先安装framework后配iis造成的.尝试了%systemroot%Microsoft.NETFrameworkv2.0.50727aspnet_regiis.e

ASP宿舍分配代码!牛人帮下忙!在线等!

问题描述 protectedvoidButton1_Click(objectsender,EventArgse){Stringstr="insertintoZhusu(xuesheng_ID,xingming,xingbie,danwei,zhuanye,banji)selectxuesheng_ID,xingming,xingbie,danwei,zhuanye,banjifromXuesheng";//groupbyxuesheng_ID,xingming,xingbie,danw

ASP.NET 的内置对象为什么不能用,急,在线等!!!

问题描述 比如下面这段代码:<scriptlanguage="C#"runat=server>voidPage_Load(Objectsender,EventArgse){Application.Add("北京","北京");Application.Add("河北","石家庄");Application.Add("山东","济南");for(inti=0;

asp.net 产生唯一随机码的方法分析_实用技巧

1. 自己写代码产生随机的数字和字母组合,每产生1个去数据库查询该随机码是否已存在,如果已存在,则重新产生,直到不重复为止. 优点:没发现有啥优点. 缺点:产生速度慢,还要查询数据库,当数据量大的时候,可能重复的机率会比较高,要查询多次数据库. 2. guid,该方法应该是用的比较多的. 优点:使用简单方便,不用自己编写额外的代码 缺点:占用数据库空间相对较大,特别是根据guid查询速度比较慢(毕竟是字符串). 3. 主键+随机码的方式,我们产生的随机码保存到数据库肯定会有个主键,用该主键+随机