`
caozuiba
  • 浏览: 903768 次
文章分类
社区版块
存档分类
最新评论

在ASP.NET中实现单点登录(不允许多用户使用同一帐号同时登录)

 
阅读更多

由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。

实现思路

利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。

SingleLogin.aspx代码

<%@ Page language="c#" Codebehind="SingleLogin.aspx.cs" AutoEventWireup="false"
Inherits="eMeng.Exam.SingleLogin" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>单点登录测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
H3 { FONT: 17px 宋体 }
INPUT { FONT: 12px 宋体 }
SPAN { FONT: 12px 宋体 }
P { FONT: 12px 宋体 }
H4 { FONT: 12px 宋体 }
</style>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<div align="center">
<h3>单点登录测试</h3>
<p>用户名称:<asp:TextBox id="UserName" runat="server"></asp:TextBox></p>
<p>用户密码:<asp:TextBox id="PassWord" runat="server" TextMode="Password"></asp:TextBox></p>
<p><asp:Button id="Login" runat="server" Text=" 登 录 "></asp:Button></p>
<p><asp:Label id="Msg" runat="server"></asp:Label></p>
</div>
</form>
</body>
</HTML>

SingleLogin.aspx.cs代码

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace eMeng.Exam
{
/// <summary>
/// SingleLogin 的摘要说明。
/// 实现单点登录
/// </summary>
public class SingleLogin : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox UserName;
protected System.Web.UI.WebControls.TextBox PassWord;
protected System.Web.UI.WebControls.Label Msg;
protected System.Web.UI.WebControls.Button Login;

private void Page_Load(object sender, System.EventArgs e)
{

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Login.Click += new System.EventHandler(this.Login_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion

private void Login_Click(object sender, System.EventArgs e)
{
// 作为唯一标识的Key,应该是唯一的,这可根据需要自己设定规则。
// 做为测试,这里用用户名和密码的组合来做标识;也不进行其它的错误检查。

// 生成Key
string sKey = UserName.Text + "_" + PassWord.Text;
// 得到Cache中的给定Key的值
string sUser = Convert.ToString(Cache[sKey]);
// 检查是否存在
if (sUser == null || sUser == String.Empty)
{
// Cache中没有该Key的项目,表名用户没有登录,或者已经登录超时
// 注意下面使用的TimeSpan构造函数重载版本的方法,是进行是否登录判断的关键。
TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
HttpContext.Current.Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session["User"] = sKey;
// 首次登录,您可以做您想做的工作了。
Msg.Text="<h4 style='color:red'>嗨!欢迎您访问<a href='http://www.21asp.net/'>www.21asp.net";
Msg.Text += "</a>,祝您浏览愉快!:)</h4>";
}
else
{
// 在 Cache 中发现该用户的记录,表名已经登录过,禁止再次登录
Msg.Text="<h4 style='color:red'>抱歉,您好像已经登录了呀:-(</h4>";
return;
}
}
}
}

分享到:
评论

相关推荐

    Asp.net中实现同一用户名不能同时登录(单点登录)

    Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中; 登录后的用户名放到Session中; 登录后的用户名放到Application...

    Asp.net中实现同一用户名不能同时登陆

    Web项目中经常遇到的问题就是同一用户名多次登陆的问题,相应的解决办法也很多. 本文介绍的方法是采用类似于MSN登陆的方法,第二次登陆时会把第一次的登陆注销掉,第一次登陆将会类似于MSN弹出:您的帐号已在别处被...

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

    // 得到Cache中的给定Key的值 string sUser = Convert.ToString(Cache[sKey]); // 检查是否存在 if (sUser == null || sUser == String.Empty) { TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web....

    Web单点登录 禁止多用户登录

    Web单点登录,同一账号同一时间只有一个在线,禁止多用户登录,异地登录后强制退出

    asp.net知识库

    在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    11.6.4 在异步任务中使用缓存 11.6.5 多异步任务和超时 11.7 总结 第12章 文件和流 12.1 使用文件系统 12.1.1 Directory类和File类 12.1.2 DirectoryInfo类和FileInfo类 12.1.3 DriveInfo类 12.1.4...

    ASP.NET4高级程序设计(第4版) 3/3

    11.6.4 在异步任务中使用缓存 395 11.6.5 多异步任务和超时 397 11.7 总结 399 第12章 文件和流 400 12.1 使用文件系统 400 12.1.1 Directory类和File类 400 12.1.2 DirectoryInfo类和FileInfo类 402...

    ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷

     单点登录就是在多个web应用程序中,实现统一登录方式,一但登录了某web应用程序,其它相关联的web应用程 序都无需再次登录,一个地方退出,所有相关联的web应用程序都退出. 二、通过利用ASP.NET Forms验证模式 ...

    Url重写篇视频------本讲将通过实例比较ASP.NET下的三种典型URL重写方案

    却无法检测非ASP.NET支持的文件扩展名的链接(我们固然可以在IIS中将所有类型的扩展名都映射到ASP.NET解析器,但是,如果我们有设置IIS的权限,为什么还要用性能更低,限制更多的ASP.NET方式的URL重写,而不使用基于...

    ASP网上购物系统旗舰版

    15)管理员可设置是否允许未登录用户下单,未用户下单获得积分 16)发货单功能:在订单系统外,管理员可以单独发布发货信息,提醒客户注意收货 17)垃圾数据删除:管理员可以批量删除客户加入购物车单并未结算的数据...

    。net图书管理系统设计方案

    同时针对于本系统的多用户使用特点,增加用户信息表: (6)管理员信息表,其数据项有用户名、密码。 为了实现图书借阅超期罚款制度,还应增设罚金规则表: (7)罚金规则表,其数据项包括免费使用天数、罚金费率、...

    Highcharts-Maps-8.1.2.zip

    在个人网站、学校网站及非盈利机构中使用 Highmaps 完全不需要经过我们的许可,直接可以任意使用! 商业网站或网站,请查看我们的 使用协议及价格。 open开源 Highmaps 最重要的特点之一就是:无论免费版还是付费...

    editplus 代码编辑器html c++ jsp css

    具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的标志,所以查找 “ \n” 时会提示查找不到,所以也就无法进行替换了,这时可以把“(”、“)”使用任意...

    Editplus 3[1].0

    具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的标志,所以查找 “&lt;script LANGUAGE="JavaScript1.1"&gt;\n&lt;!--\nhtmlAdWH('93163607', '728', '90'.);\n//-...

    EditPlus 2整理信箱的工具

    具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的标志,所以查找 “&lt;script LANGUAGE="JavaScript1.1"&gt;\n&lt;!--\nhtmlAdWH('93163607', '728', '90'.);\n//-...

    正则表达式

    如果想在正则表达式中使用特殊的标点符号,必须在它们之前加上一个 "\" . 2.字符类 将单独的直接符放进中括号内就可以组合成字符类.一个字符类和它所包含的任何一个字符都匹配,所以正则表达式 / [abc] / 和字母 ...

    KesionIMALL 电子商务系统官方版 v1.0.7

    这是KesionIMALL 电子商务系统官方版 v1.0.7,该源码系统KESIONIMALL(后面简称IMALL)电子商务管理系统是KESION旗下服务于个人大卖家、中小型企业的网店系统,IMALL系统采用微软.NET2.0平台以及全新的软件开发环境...

Global site tag (gtag.js) - Google Analytics