在ASP.NET 中实现单点登录

出自:【孟宪会之精彩世界】 发布日期:2005年1月27日 8点48分0秒 [有删改] 
由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在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; 
  } 


}

(0)

相关推荐

  • 一个简单的asp.net 单点登录实现

    以下是实现的效果图:  首先上图的点击火车订票链接,就会打开http://学生信息平台网站/LoginToTrainSite.asa页面. LoginToTrainSite.asa页面的大致代码如下: 复制代码 代码如下: <% Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "no-cache" Response.Ad

  • 基于.Net的单点登录(SSO)实现解决方案

    前些天一位朋友要我帮忙做一单点登录,其实这个概念早已耳熟能详,但实际应用很少,难得最近轻闲,于是决定通过本文来详细描述一个SSO解决方案,希望对大家有所帮助.SSO的解决方案很多,但搜索结果令人大失所望,大部分是相互转载,并且描述的也是走马观花. 闲话少叙,进入正题,我的想法是使用集中验证方式,多个站点集中Passport验证. 如下图所示:  为方便清晰描述,先定义几个名词,本文中出现之处均为如下含义. 主站:Passport集中验证服务器 http://www.passport.com/ .

  • 如何在不同.net版本实现单点登录

    所谓单点登录(Single Sign On就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.其实对于程序员在技术上要实现就得就是多个不同域名间共享cookie的问题. 最近在为ERP添加一个部署在另一台机器上,链接到原有老系统中的子项目,调用原有老项目中的Login实现单点登录,尝试了N次屡试不成,最后确定问题,是,.net2.0与4.0中对cookie的加密/解密方法由此差异,于是经过研究,重写实现了一个可以在不同.net版本中实现单点登录的简单方法. 1,共用登陆页代

  • .net core 1.0 实现单点登录负载多服务器

    前言 .net core 出来有一时间了,这段时间也一直在做技术准备,目前想做一个单点登录(SSO)系统,在这之前用.net时我用习惯了machineKey ,也顺手在.net core 中尝试了一上,结果发现不好使了,也不起作用,于是开始了网上学习. 实现方法 功夫不负有心人,网上高人还是多,在github.com上面ISSUES中也有人在讨论此问题,于是找到代码尝试,结果实现了. 直接上代码,我们需要先封装一个XmlRepository,Key的格式如下: <?xml version="

  • asp.net简单实现单点登录(SSO)的方法

    本文实例讲述了asp.net简单实现单点登录(SSO)的方法.分享给大家供大家参考,具体如下: 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统 CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架(耶鲁大学开发)主要用于Java Php 有兴趣大家可以研究下.. 下面是一个简单实现单点登录的

  • .NET 单点登录解决方案

    这里指的单点,泛指在WEB服务端,一个账户同一时刻只能存在一个票据! 大家开发中可能都碰到的一个问题,怎么使同一个用户,在同一时间内只允许登录一次. 很多人都会想到在数据库中用一个标识字段,登录进去置1,退出置0,登录时判断这个字段,如果是1就说明此用户在线,不允许登录,这个方案看似有效,但在实际使用中发现问题很多,比如,用户不是通过程序中的退出按纽退出,而是直接关闭IE,这样的话,下次登录时数据库里此用户还在线呢,这个用户就无法登录,当然也有一些办法可以解决这个问题:增加一个定时作业,定期复位

  • 在ASP.NET 中实现单点登录

    出自:[孟宪会之精彩世界] 发布日期:2005年1月27日 8点48分0秒 [有删改]  由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录.在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析.   实现思路   利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期:而Cache对所有的用户都可以访问,因此,用它保存用户

  • Yii2 中实现单点登录的方法

    本文介绍了Yii2 中实现单点登录的方法,分享给大家,具体如下: 修改 /common/config/main.php 一.在 config 头部上加上以下代码 <?php // Session 跨域 $host = explode('.', $_SERVER["HTTP_HOST"]); if (count($host) > 2) { define('DOMAIN', $host[1] . '.' . $host[2]); } else { define('DOMAIN'

  • ASP.NET MVC SSO单点登录设计与实现代码

    实验环境配置 HOST文件配置如下: 127.0.0.1 app.com 127.0.0.1 sso.com IIS配置如下: 应用程序池采用.Net Framework 4.0 注意IIS绑定的域名,两个完全不同域的域名. app.com网站配置如下:  sso.com网站配置如下: memcached缓存: 数据库配置: 数据库采用EntityFramework 6.0.0,首次运行会自动创建相应的数据库和表结构. 授权验证过程演示: 在浏览器地址栏中访问:http://app.com,如果

  • JavaScript实现单点登录的示例

    项目中遇到单点登录这个问题,当点击链接的时候跳转到另一个系统中并实现自动登录进去,直接进去系统的页面 因为不同的系统涉及到跨域的问题,所以使用nginx来解决跨域的问题 先跳转到另一个系统的一个页面,在这个页面里实现登录操作再跳转到系统中我们需要的页面 还有一个问题就是登录的时候需要用户名和密码,用户名和密码不是固定的,需要动态获取,所以跳转到过渡页面的时候需要携带参数 携带参数是通过url传递的,这里用户名和密码使用了简单的base64加密 过渡页面接受参数 var params = wind

  • java单点登录(SSO)的实现

    单点登录(SSO):SSO是指在多个应用系统中个,用户只需要登陆一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一用户的登陆的机制. SSO的实现过程: 通过上述图形,我们可以看到SSO的大体实现步骤主要分为两大步:存储登录信息,查验登录信息. 对于SSO,我们也可以将之分为两大不同的类型:同域SSO和跨域SSO:其中同域SSO又可以分为完全同域SSO和同父域SSO. 一.完全同域SSO:指的是域名完全相同的多个应用系统中实现单点登录. 其实现步骤主要分为:

  • Asp.net mvc 权限过滤和单点登录(禁止重复登录)

    1.权限控制使用controller和 action来实现,权限方式有很多种,最近开发项目使用控制控制器方式实现代码如下 /// <summary> /// 用户权限控制 /// </summary> public class UserAuthorize : AuthorizeAttribute { /// <summary> /// 授权失败时呈现的视图 /// </summary> public string AuthorizationFailView

  • ASP.NET Core中实现用户登录验证的最低配置示例代码

    前言 本文主要给大家介绍了关于ASP.NET Core用户登录验证的最低配置的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 背景是在一个项目中增加临时登录功能,只需验证用户是否登录即可,所需的最低配置与实现代码如下. 方法如下: 在 Startup 的 ConfigureServices() 方法中添加 Authentication 的配置: services.AddAuthentication(options => { options.DefaultAuthenti

随机推荐