仓酷云

标题: ASP.NET教程之Asp.net中完成统一用户名不克不及同时上岸(... [打印本页]

作者: 因胸联盟    时间: 2015-1-16 22:31
标题: ASP.NET教程之Asp.net中完成统一用户名不克不及同时上岸(...
你可以先看看这篇文章(软微学院生涯-三朝元老经验谈),打不开再跟我说。(我的意思是想让她自己先稍微了解一下到底现在各个方向学的工具以及以后要做的工具大概是什么,因为喜欢做什么样的事其实自己最清楚的)asp.netWeb项目中常常碰到的成绩就是统一用户名屡次上岸的成绩,响应的办理举措也良多,总结起来不过乎这几种办理举措:将上岸后的用户名放到数据库表中;上岸后的用户名放到Session中;上岸后的用户名放到Application中;上岸后的用户名放到Cache中。一样平常的这几种办法都是上岸了以后,假如没有一般加入,第二次上岸将不被同意。如许一样平常城市存在一个成绩:假如用户没有一般加入体系,那末他接上去持续上岸的时分,由于Session没有过时等成绩,会被回绝持续上岸体系,只能守候Session过时后才干上岸。本文先容的办法是接纳相似于MSN上岸的办法,第二次上岸时会把第一次的上岸刊出失落,第一次上岸将会相似于MSN弹出:您的帐号已在别处被上岸,您被强制下线的提醒信息。
功效完成起来也对照复杂:

上岸用户名暗码考证经由过程以后输出以下代码:
HashtablehOnline=(Hashtable)Application["Online"];
if(hOnline!=null)
{
IDictionaryEnumeratoridE=hOnline.GetEnumerator();
stringstrKey="";
while(idE.MoveNext())
{
if(idE.Value!=null&&idE.Value.ToString().Equals(UserID))
{
//alreadylogin
strKey=idE.Key.ToString();
hOnline[strKey]="XXXXXX";
break;
}
}
}
else
{
hOnline=newHashtable();
}

hOnline[Session.SessionID]=UserID;
Application.Lock();
Application["Online"]=hOnline;
Application.UnLock();

用户上岸的时分将上岸用户名放在一个全局变量Online,Online为Hashtable布局,Key为SessionID,Value为用户名。每次用户上岸时均判别以下要上岸的用户名在Online中是否是已存在,假如存在该用户名已被上岸,将第一团体上岸的SessionID对应的用户名强迫变动为XXXXXX,暗示该上岸将被强迫刊出。
创建一个CommonPage页,体系中一切的页面都承继于CommonPage页,在CommonPage页的背景代码中增加以下代码:
overrideprotectedvoidOnInit(EventArgse)
{

HashtablehOnline=(Hashtable)Application["Online"];
if(hOnline!=null)
{
IDictionaryEnumeratoridE=hOnline.GetEnumerator();
while(idE.MoveNext())
{
if(idE.Key!=null&&idE.Key.ToString().Equals(Session.SessionID))
{
//alreadylogin
if(idE.Value!=null&&"XXXXXX".Equals(idE.Value.ToString()))
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"]=hOnline;
Application.UnLock();
MessageBox("你的帐号已在别处上岸,你被强制下线!",Login.aspx);
returnfalse;
}
break;
}
}
}

}
承继于CommonPage的页面在革新时都要实行重载的OnInit中的代码,掏出Online,找到该用户对应的SessionID,判别SessionID里对应的用户名是不是变动,假如变动,就强制下线,清失落Session,转到Login画面。
最初必要在Session过时大概加入体系时开释资本,在Global.asax文件中的Session_End中增加以下代码:
HashtablehOnline=(Hashtable)Application["Online"];
if(hOnline[Session.SessionID]!=null)
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"]=hOnline;
Application.UnLock();
}

假如用户不一般加入后重上岸,由于重上岸的优先级年夜,不会影响用户的上岸,而不一般加入的用户占用的资本会在Session过时后主动扫除,不会影响体系的功能。


你可以先看看这篇文章(软微学院生涯-三朝元老经验谈),打不开再跟我说。(我的意思是想让她自己先稍微了解一下到底现在各个方向学的工具以及以后要做的工具大概是什么,因为喜欢做什么样的事其实自己最清楚的)
作者: 活着的死人    时间: 2015-1-19 16:05
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
作者: 不帅    时间: 2015-1-24 20:48
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
作者: 山那边是海    时间: 2015-2-7 21:29
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
作者: 金色的骷髅    时间: 2015-2-23 11:43
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
作者: 小魔女    时间: 2015-3-7 08:45
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
作者: 仓酷云    时间: 2015-3-14 16:24
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者: 变相怪杰    时间: 2015-3-21 12:48
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2