All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
在ASP.NET,2.0中直接得到本页面生成的HTML代码_[Asp.Net教程]
仅用xsl和asp实现分页功能_[XML教程]
visual c++中的构造函数与析构函数
PHP输出控制功能在简繁体转换中的应用_[PHP教程]
一个功能齐全的DataGrid分页例子_[Asp.Net教程]
PEAR--HTML_QuickForm与Smarty,的结合应用_php资料_编程技术
用PHP程序实现删除目录的三种方法实例_php资料_编程技术
二十一 Forms 可用性_[Html教程]
ASP.NET技巧:存储过程的分析_[Asp.Net教程]
如何实现Asp与Asp.Net共享Session_.net资料_编程技术
Reading number is top 10 pictures
Ashlynn Brooke photograph of a group4
清纯性感的美眉2
胸部遭到偷窥的女人们
The money of more than 100 countries and regions18
Discharge accidentally Actresses by the breast1
The real super beauty12
奇趣的世界记录2
青春清纯美女大集合4
The money of more than 100 countries and regions2
修电脑也有这么漂亮的美女
Download software ranking
Unix video tutorial5
Professional killers2 data package
虚拟机汉化软件
WebService在.NET中的实战应用教学视频 → 第1集
Unix video tutorial10
Sora aoi, the nurse, uniform ,nursing assistant
Eclipse 4.2.1 For Win32
Tram sex maniac 2 (H) rar bag8
Unix video tutorial6
The Bermuda triangle1
归海一刀 published in(发表于) 2014/1/30 1:58:17 Edit(编辑)
阻止同一Asp.net用户重复次登录代码_[Asp.Net教程]

阻止同一Asp.net用户重复次登录代码_[Asp.Net教程]

阻止同一Asp.net用户重复次登录代码_[Asp.Net教程]
同一个用户在某些系统中同一时间是只能登录一次的,如果一个用户已经登录了,在退出之前如果再次登录的话需要报错。对于这样的情况,有什么处理方法呢?在用户登录时,首先判断此用户是否已经在Application中存在,如果存在就报错,不存在的话就加到Application中(Application是所有Session共有的,整个web应用程序唯一的一个对象,达到阻止同一Asp.net用户重复次登录目的

  stringstrUserId=txtUser.Text;
  ArrayListlist=Application.Get
("GLOBAL_USER_LIST")asArrayList;
  if(list==null)
  {
  list=newArrayList();
  }
  for(inti=0;i  {
  if(strUserId==(list[i]asstring))
  {
  //已经登录了,提示错误信息
  lblError.Text="此用户已经登录";
  return;
  }}
  list.Add(strUserId);
  Application.Add("GLOBAL_USER_LIST",list);

当然这里使用Cache等保存也可以。

接下来就是要在用户退出的时候将此用户从Application中去除,我们可以在Global.asax的Session_End事件中处理:

voidSession_End(objectsender,EventArgse)
  {
  //在会话结束时运行的代码。
  //注意:只有在Web.config文件中的sessionstate模式设置为
  //InProc时,才会引发Session_End事件。
如果会话模式设置为StateServer
  //或SQLServer,则不会引发该事件。
  stringstrUserId=Session["SESSION_USER"]asstring;
  ArrayListlist=Application.Get("GLOBAL_USER_LIST")asArrayList;
  if(strUserId!=null&&list!=null)
  {
  list.Remove(strUserId);
  Application.Add("GLOBAL_USER_LIST",list);
  }
  }

这些都没有问题,有问题的就是当用户直接点浏览器右上角的关闭按钮时就有问题了。因为直接关闭的话,并不会立即触发Session过期事件,也就是关闭浏览器后再来登录就登不进去了。

这里有两种处理方式:

1、使用Javascript方式

在每一个页面中加入一段javascript代码:

functionwindow.onbeforeunload()
  {
  if(event.clientX>document.body
.clientWidth&&event.clientY<0||event.altKey){
  window.open("logout.aspx");
  }
  }

由于onbeforeunload方法在浏览器关闭、刷新、页面调转等情况下都会被执行,所以需要判断是点击了关闭按钮或是按下Alt+F4时才执行真正的关闭操作。

然后在logout.aspx的Page_Load中写和Session_End相同的方法,同时在logout.aspx中加入事件:onload="javascript:window.close()"

但是这样还是有问题,javascript在不同的浏览器中可能有不同的行为,还有就是当通过文件->关闭时没有判断到。

2、使用xmlhttp方法(这种方法测试下来没有问题)

在每个页面中加入如下的javascript(这些javascript也可以写在共通里,每个页面引入就可以了),

  varx=0;
  functionmyRefresh()
  {
  varhttpRequest=
newActiveXObject("microsoft.xmlhttp");
  httpRequest.open("GET","test.aspx",false);
  httpRequest.send(null);
  x++;
  if(x<60)//60次,
//也就是Session真正的过期时间是30分钟
  {
  setTimeout("myRefresh()",30*1000);//30秒
  }
  }
  myRefresh();
  在web.config中设置
以下是引用片段:
"InProc"timeout="1">
  test.aspx页面就是一个空页面,
只不过需要在Page_Load中加入:
以下是引用片段:
  Response.Expires=-1;
  保证不使用缓存,每次都能调用到这个页面。


添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.