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();
}
}

时间: 2024-08-13 06:56:12

asp.net不允许重复登陆代码(网站行)的相关文章

https,https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题

一:什么是https SSL(Security   Socket   Layer)全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安全性,同时SSL安全机制是依靠数字证书来实现的.    SSL基于公用密钥和私人密钥,用户使用公用密钥来加密数据,但解密数据必须使用相应的私人密钥.使用SSL安全机制的通信过程如下:用户与IIS服务器建立连接后,服务器会把数字证书与公用密钥发送给用户,用户端生成会话密钥,并用公共密钥对会话密钥进行加

asp.net如何抓取其他网站的内容

1. 需要引用的类库 using System.Net; using System.IO; using System.Text; using System.Text.RegularExpressions; 2. 获取其他网站网页内容的关键代码 WebRequest request = WebRequest.Create("http://目标网址.com/"); WebResponse response = request.GetResponse(); StreamReader read

c# asp.net 新建项目与新建网站区别

http://blog.sina.com.cn/s/blog_9a9e0bd601017iz3.html web应用程序----Web网站 1--web应用程序Default.aspx显示有两个原有文件及Default.aspx.cs和Default.aspx.designer.cs:Web网站Default.aspx显示有一个原有文件Default.aspx.cs. 2--web应用程序有重新生成和发布两项:Web网站只有一个发布网站. 3--Web应用程序和一般的winform没有什么区别都

ASP.NET生成的HTML代码

在ASP.NET 2.0中,有时候需要对ASP.NET生成的HTML代码进行处理,或者是保存成静态文件.ASP.NET 提供了直接将请求保存成文件的方法:HttpRequest.SaveAs方法.下面这个方法就是在ASP.NET 2.0中得到ASP.NET生成的HTML代码,同时,生成一个静态文件的方法. C# <%@ Page Language="C#" AutoEventWireup="true" %> <!DOCTYPE html PUBLI

c#/ASP.NET操作cookie(读写)代码示例

Cookie是存在硬盘上,IE存cookie的地方和Firefox存cookie的地方不一样.不同的操作系统也可能存cookie的地方不一样. 不同的浏览器会在各自的独立空间存放Cookie, 互不干涉以我的windows7, IE8为例,  cookie存在这: C:\Users\xiaoj\AppData\Local\Microsoft\Windows\Temporary Internet Files 注意: 缓存文件和cookie文件,是存在一起的, 都在这个目录下. 你也可以这样找, 打

asp微信写的jssdk代码,很多朋友在网上找,今天贡献出来

想实现微信公众号的jssdk功能,如果你的代码是asp写的,那么有福音了,用下面的代码就行了:<!--#include file="php_MD5.asp" --> <!--#include file="JSON.asp" --> <% Set Rs = SqlHelper("Select * From [sys_config] Where ID=1","") If Not Rs.Eof Then

[Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)

这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) 如果想

C++统计代码注释行数 &amp; 有效代码行数 &amp; 代码注释公共行 &amp; 函数个数

问题来源,在14年的暑假的一次小项目当中遇到了一个这样的问题,要求统计C++代码的注释行数,有效代码行数,代码注释公共行数,以及函数个数. 下面稍微解释一下问题, 1)注释行数:指有注释的行,包括有代码和注释的公共行(如:3,4,15,22...) 2)有效代码行:指有代码的行,包括有代码和注释的公共行(如:1,4,11,15,25....) 3)代码注释公共行:指又有代码又有注释的行(如:4,15...) 4)函数个数:这个不用说明了吧. 以下为注释情况展示代码: 1 #include <st

asp.net各种类型视频播放代码(全)

1.avi格式 代码片断如下: <object id="video" width="400" height="200" border="0"  classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> <param name="ShowDisplay" value="0"> <param