ASP.NET防止用户多次登录的方法

简介:

常见的处理方法是,在用户登录时,判断此用户是否已经在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 = 0; 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)

{

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

// 注意: 只有在 Web.config 文件中的 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过期事件,也就是关闭浏览器后再来登录就登不进去了。

这里有两种处理方式:

1、使用Javascript方式

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

以下是引用片段:

function window.onbeforeunload()

{

if (event.clientX>document.body.clientWidth && event.clientY< 0||event.altKey){

window.open("logout.aspx");

}

}




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2009/08/13/1545266.html,如需转载请自行联系原作者


相关文章
|
6月前
|
Windows
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
​史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)
585 0
|
10月前
|
C#
.NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法
.NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法
123 0
|
SQL 数据可视化 BI
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法
.net core操作ES进行读写数据操作在Package包项目下,新增NEST包。注意,包版本需要和使用的ES的版本保持一致,可以避免因为不兼容所导致的一些问题。例如我本机使用的ES版本是7.13版本,所以我安装的NEST包也是7.13版本:
625 0
十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法
|
开发框架 程序员 API
【C#】.net core2.1,通过扩展状态代码页方法对404页面进行全局捕抓并响应信息
在开发一个网站项目时,除了异常过滤功能模块,还需要有针对404不存在的api接口和页面处理功能 本篇文章就来讲讲,如何自定义全局请求状态类来统一处理
184 0
|
缓存 移动开发 C#
【.Net实用方法总结】 整理并总结System.IO中TextWriter类及其方法介绍
本文主要介绍System.IO命名空间的TextWriter类,介绍其常用的方法和示例说明。
|
C# 开发者 索引
【.Net实用方法总结】 整理并总结System.IO中TextReader类及其方法介绍
本文主要介绍System.IO命名空间的TextReader类,介绍其常用的方法和示例说明。
|
存储 缓存 C#
【.Net实用方法总结】 整理并总结System.IO中StringWriter类及其方法介绍
本文主要介绍System.IO命名空间的StringWriter类,介绍其常用的方法和示例说明。
|
C# 开发者 索引
【.Net实用方法总结】 整理并总结System.IO中StringReader类及其方法介绍
本文主要介绍System.IO命名空间的StringReader类,介绍其常用的方法和示例说明。
|
存储 网络协议 程序员
【.Net实用方法总结】 整理并总结System.IO中Stream类及其方法介绍
本文主要介绍System.IO命名空间的Stream类,介绍其常用的方法和示例说明。
|
缓存 C# 开发者
【.Net实用方法总结】 整理并总结System.IO中StreamWriter类及其方法介绍
本文主要介绍System.IO命名空间的StreamWriter类,介绍其常用的方法和示例说明。