知识大全 ASP.NET中防止用户多次登录的方法

Posted

篇首语:不要在乎别人的眼光,这样我们会生不如死。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET中防止用户多次登录的方法相关的知识,希望对你有一定的参考价值。

ASP.NET中防止用户多次登录的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在web开发时 有的系统要求同一个用户在同一时间只能登录一次 也就是如果一个用户已经登录了 在退出之前如果再次登录的话需要报错

  常见的处理方法是 在用户登录时 判断此用户是否已经在Application中存在 如果存在就报错 不存在的话就加到Application中(Application是所有Session共有的 整个web应用程序唯一的一个对象)

  

  

  string strUserId = txtUser Text;

  ArrayList list = Application Get( GLOBAL_USER_LIST ) as ArrayList;

  if (list == null)

  list = new ArrayList();

  for (int i = ; i < list Count; i++)

  

  if (strUserId == (list[i] as string))

  

  //已经登录了 提示错误信息

  lblError Text = 此用户已经登录 ;

  return;

  

  

  list Add(strUserId);

  Application Add( GLOBAL_USER_LIST list);当然这里使用Cache等保存也可以

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

  

  

  void Session_End(object sender EventArgs e)

  // 在会话结束时运行的代码

  // 注意: 只有在 nfig 文件中的 sessionstate 模式设置为

  // InProc 时 才会引发 Session_End 事件 如果会话模式设置为 StateServer

  // 或 SQLServer 则不会引发该事件

  string strUserId = Session[ SESSION_USER ] as string;

  ArrayList list = Application Get( GLOBAL_USER_LIST ) as ArrayList;

  if (strUserId != null && list != null)

  list Remove(strUserId);

  Application Add( GLOBAL_USER_LIST list);

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

  这里有两种处理方式

   使用JavaScript方式

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

  

  function window onbeforeunload() if (event clientX > document body clientWidth &&event clientY < || event altKey) window open( logout ASPx );     

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

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

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

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

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

  

  var x = ;function myRefresh() var Request = new ActiveXObject( microsoft xmlx false);(null);x++;if (x < ) // 次 也就是Session真正的过期时间是 分钟setTimeout( myRefresh() * ); // 秒myRefresh();在nfig中设置

  <sessionState mode= InProc timeout= ></sessionState>test aspx

  页面就是一个空页面 只不过需要在Page_Load中加入 Response Expires = ;

  保证不使用缓存 每次都能调用到这个页面

  原理就是 设置Session的过期时间是一分钟 然后在每个页面上定时每 秒连接一次测试页面

cha138/Article/program/ASP/201311/21775

相关参考

知识大全 Asp.net中防止用户多次登录的方法[1]

Asp.net中防止用户多次登录的方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在W

知识大全 ASP.NET防止用户多次登录的最简单的方法

ASP.NET防止用户多次登录的最简单的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于

知识大全 asp.net用户ASPNET登录失败问题

asp.net用户ASPNET登录失败问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  执行当

知识大全 asp.net用户ASPNET登录失败的问题

asp.net用户ASPNET登录失败的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  执行

知识大全 轻松解决asp.net用户ASPNET登录失败的问题

轻松解决asp.net用户ASPNET登录失败的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET中防止页面多次提交的代码实现

ASP.NET中防止页面多次提交的代码实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此处提

知识大全 防止ASP.NET按钮多次提交的办法

防止ASP.NET按钮多次提交的办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  网上查了很多

知识大全 ASP.NET 2.0防止同一用户同时登陆

ASP.NET2.0防止同一用户同时登陆  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要防止同

知识大全 在ASP.NET中使用Windows登录[4]

在ASP.NET中使用Windows登录[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 在ASP.NET中使用Windows登录[2]

在ASP.NET中使用Windows登录[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb