asp.net下一个账号不允许多个用户同时在线,重复登陆的代码

方法一:


代码如下:

string sKey = username.Text.ToString().Trim(); // 得到Cache中的给定Key的值
string sUser = Convert.ToString(Cache[sKey]); // 检查是否存在
if (sUser == null || sUser == String.Empty)
{
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);//取得Session的过期时间
HttpContext.Current.Cache.Insert(sKey, sKey, null, DateTime.MaxValue, SessTimeOut, System.Web.Caching.CacheItemPriority.NotRemovable, null);//将值放入cache己方便单点登录
//成功登录
}
else if (Cache[sKey].ToString() == sKey)//如果这个账号已经登录
{
ClientScript.RegisterStartupScript(GetType(), "提示", "<script>alert('对不起,当前用户已经登录');</script>");
return;
}
else
{
Session.Abandon();//这段主要是为了避免不必要的错误导致不能登录
}

代码如下:

//关闭浏览器或窗口时清空Cache的方法.在主页面aspx文件中加入一个onunload事件.通过ajax清空hOnline中的Session.SessionID
window.onunload=function(){
$.ajax({
type: "POST",
   data:"sKey="+sKey;
url: "online.aspx"
});
}

online.aspx.cs代码


代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    HttpContext.Current.Cache.Remove(sKey);
}
//在Global.asax文件中的Session_End方法里加入
//Session过期后.清空hOnline中的Session.SessionID
    Hashtable hOnline = (Hashtable)Application["Online"];
if (hOnline[Session.SessionID] != null)
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
}

方法二:


代码如下:

//sKey为登录用户名
if(ApplicationOnline(username.Text.tirm())){
Hashtable hOnline = new Hashtable();
hOnline[Session.SessionID] = sKey;
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
}

public Boolean ApplicationOnline(string sKey)
{
Boolean flag = true;
Hashtable hOnline = (Hashtable)Application["Online"];
if (hOnline != null)
{
IDictionaryEnumerator idE = hOnline.GetEnumerator();
while (idE.MoveNext())
{
//if (idE.Key != null && idE.Key.ToString().Equals(Session.SessionID))
//{
if (idE.Value != null && sKey.Equals(idE.Value.ToString()))
{
flag = false;
}
break;
//}
}
}
return flag;
}

//关闭浏览器或窗口时清空Session.SessionID的方法.在主页面aspx文件中加入一个onunload事件.通过ajax清空Session.SessionID
window.onunload=function(){
$.ajax({
type: "POST",
url: "online.aspx"
});
}

online.aspx.cs代码


代码如下:

protected void Page_Load(object sender, EventArgs e)
{
Hashtable hOnline = (Hashtable)Application["Online"];
if (hOnline[Session.SessionID] != null)
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
}
}

(0)

相关推荐

  • C#生成不重复随机数列表实例

    复制代码 代码如下: /// <summary>        /// 生成不重复随机数列表实例        /// </summary>        /// <param name="count">不重复数数量</param>        /// <returns>不重复数列表</returns>        private static List<int> GetRandomList(int

  • C#有效防止同一账号多次登录(附三种方法)

    本文先为大家介绍如何利用缓存Cache方便地实现此功能. Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户: 而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息. 只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的超时时间,在用户每次登录的时候去判断一下Cache[用户名]是否有值,如果没有值,证明该用户没有登录,否则该用

  • php防止用户重复提交表单

    我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 效果图: 那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手: 首先从前端做限制.前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效. 第二,我们可以在提交后做redirect页面重定向,

  • 用C#生成不重复的随机数的代码

    对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数.伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了.伪随机数的选 择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地"随机",随机种子的选择就显得非常重要.如果随机种子一样,那么同一个随机数发生器产生 的随机数也会一样.

  • 注册或者点击按钮时,怎么防止用户重复提交数据(实例讲解)

    asp.net实现点击按钮后设按钮不可用并提交 复制代码 代码如下: <asp:Button ID="Button1" runat="server" Text="123456" OnClientClick="this.disabled=true;this.form.submit(); "  UseSubmitBehavior= "False"  onclick="Button1_Click&

  • asp.net 防止用户通过后退按钮重复提交表单

    防止用户通过后退按钮重复提交表单 <% response.Buffer=true response.Expires=0 response.ExpiresAbsolute=now()-1 response.CacheControl="no-cache" %> response.Buffer=true的意思就是指明输出页面是否被缓冲,当属性值为True时,服务器将不会向客户端发送任何信息,直到所有程序执行完或者遇到 <% Response.Flush %>或<

  • asp.net下一个账号不允许多个用户同时在线,重复登陆的代码

    方法一: 复制代码 代码如下: string sKey = username.Text.ToString().Trim(); // 得到Cache中的给定Key的值 string sUser = Convert.ToString(Cache[sKey]); // 检查是否存在 if (sUser == null || sUser == String.Empty) { TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.

  • ASp.net下fckeditor配置图片上传最简单的方法

    1. 原先的配置 把 fckeditor/filemanager/connectors 目录删除: 有同学可能会问了,都删除了怎么上传文件? 呵呵... 2. 不要引用 FredCK.FCKeditorV2.dll; 因为我都是采用js写的,不采用控件的方式: 其实网上有很多人在尝试往 fckeditor/filemanager/connectors目录下注入, 确实也有人不小心直接把FCK编辑器没有任何配置的情况下传到网上导致中招了: 3. 现在讲正题吧,一般来说我们用FCK的时候并不多,在一

  • ASP.NET下使用WScript.Shell执行命令

    ASP.NET提供了两种方法让我们使用COM组件:1.Server对象的CreatObject方法:2.将COM组件转化为.NET组件. ·Server对象的CreatObject方法 这个方法比较简单,直接使用就是.当然前提是服务器上已经注册了该组件,而WScript.Shell是系统自带的,我们不用担心.只是在编写代码时注意ASP.NET与ASP语法上的细微差别就可以了.直接给出代码如下: <!-- Titel: WScript.Shell .NET Version 1 Author: la

  • asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页

    摘要:解释了url重写的相关知识.用asp.net实现二级域名重写的方法.对重写的一些问题做了汇总解答.提供了几段示例代码. 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑. 来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题.很多朋友一直考虑不清(我前几天也一直搞不明白)的问题是,我键入一个地址后,怎么这个url就被重写了?第一步:在浏览器键入了一个地址,比如http://lov

  • 用 Asp.Net 建立一个在线 RSS 新闻聚合器的方法

    随着办公室和家庭上网在线时间的延长,以及 Web 站点和可访问的互联网应用程序呈持续爆炸性增长,应用程序之间能数据共享变得越来越重要.在异构平台之间共享数据需要一种平台中立的数据格式,这种数据格式要求能易于通过标准的互联网协议来传输,而这正是XML的用武之地.因为XML文件本质上只是一个文本文件,其编码格式众所周知,而且现有的XML解析器能为所有主流编程语言所用,所以XML数据能被任何平台轻松使用. Web 网站聚合就是一种使用 XML 来共享数据的范例,在新闻站点和网志中经常可以看到.采用 W

  • 基于asp.net下使用jquery实现ajax的解决方法

    无论是jquery还是ajax在今天来讨论已经很落后了,网上也有非常多的这方面的资料,但是依然有不少新手对此很茫然.本文以最简单的方法为新手示范如何使用jquery实现ajax技术(所以本文是专为新手所写,老鸟勿喷,大神此处省略一万字).至于什么是jquery什么是ajax,自己谷歌去. 首先新建一个名闻Ajax的asp.net web空应用程序,项目目录如下图所示. 其中.ashx文件是一般处理程序,暂时不用知道它是干嘛用的,后面你就知道了.jquery-1.7.1.js可以在这里下载. 我们

  • asp分页的一个类

    asp分页的一个类  在50,000条记录下测试过,速度比ado的那个要快多了 <% '************************************************************************************ '具体用法 Dim strDbPath Dim connstr Dim mp Set mp = New MyPage strDbPath = "fenye/db.mdb" connstr  = "Provider=M

  • php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值

    next() 定义和用法 next() 函数把指向当前元素的指针移动到下一个元素的位置,并返回该元素的值. 如果内部指针已经超过数组的最后一个元素,函数返回 false. 语法 next(array)参数 描述 array 必需.规定要使用的数组. 说明 next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位.这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位.如果移动指针的结果超出了数组单元的末端,则 next() 返回 FALSE. 注

  • 按下回车键指向下一个位置的一个函数代码

    复制代码 代码如下: function tofocus(itemname)    //按回车置下一个位置         {             var a             a=eval("document.vouch."+itemname)             a.focus()         } 在控件中使用onkeypress="javascrip:if(window.event.keyCode==13){tofocus('nextformname')

  • js和jquery中循环的退出和继续下一个循环

    作为水货,就是学会了1+1=3也要记录一下!错了,是2 学习记录: js中的 for(var i=1;i<5;i++){ if(i==3){ break; // 使用break,弹出2次提示分别为1,2:如果使用continue,则会弹出3次,分别是1,2,4 } alert(i); } 循环,退出循环,使用break:退出当前循环继续下一个循环,使用continue jquery中的each()方法中要实现break,使用return false:continue,使用return true

随机推荐