当前位置: 移动技术网 > IT编程>开发语言>.net > 在ASP.NET 中实现单点登录

在ASP.NET 中实现单点登录

2018年04月28日  | 移动技术网IT编程  | 我要评论

毛岸英之死,古代皇帝短命竟因这事做多了,重庆加成出国咨询服务有限公司

出自:【孟宪会之精彩世界】 发布日期: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; 
  } 


}  

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网