在ASP.NET 中实现单点登录

时间:2021-05-25

出自:【孟宪会之精彩世界】发布日期:2005年1月27日8点48分0秒[有删改]
由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。
实现思路
利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。
SingleLogin.aspx代码
<%@Pagelanguage="c#"Codebehind="SingleLogin.aspx.cs"AutoEventWireup="false"
Inherits="eMeng.Exam.SingleLogin"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>单点登录测试</title>
<metahttp-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>
<bodyMS_POSITIONING="GridLayout">
<formid="Form1"method="post"runat="server">
<divalign="center">
<h3>单点登录测试</h3>
<p>用户名称:<asp:TextBoxid="UserName"runat="server"></asp:TextBox></p>
<p>用户密码:<asp:TextBoxid="PassWord"runat="server"TextMode="Password"></asp:TextBox></p>
<p><asp:Buttonid="Login"runat="server"Text="登录"></asp:Button></p>
<p><asp:Labelid="Msg"runat="server"></asp:Label></p>
</div>
</form>
</body>
</HTML>
SingleLogin.aspx.cs代码
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
namespaceeMeng.Exam
{
///<summary>
///SingleLogin的摘要说明。
///实现单点登录
///</summary>
publicclassSingleLogin:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.TextBoxUserName;
protectedSystem.Web.UI.WebControls.TextBoxPassWord;
protectedSystem.Web.UI.WebControls.LabelMsg;
protectedSystem.Web.UI.WebControls.ButtonLogin;
privatevoidPage_Load(objectsender,System.EventArgse)
{
}
#regionWeb窗体设计器生成的代码
overrideprotectedvoidOnInit(EventArgse)
{
InitializeComponent();
base.OnInit(e);
}
///<summary>
///设计器支持所需的方法-不要使用代码编辑器修改
///此方法的内容。
///</summary>
privatevoidInitializeComponent()
{
this.Login.Click+=newSystem.EventHandler(this.Login_Click);
this.Load+=newSystem.EventHandler(this.Page_Load);
}
#endregion
privatevoidLogin_Click(objectsender,System.EventArgse)
{
//作为唯一标识的Key,应该是唯一的,这可根据需要自己设定规则。
//做为测试,这里用用户名和密码的组合来做标识;也不进行其它的错误检查。
//生成Key
stringsKey=UserName.Text+"_"+PassWord.Text;
//得到Cache中的给定Key的值
stringsUser=Convert.ToString(Cache[sKey]);
//检查是否存在
if(sUser==null||sUser==String.Empty)
{
//Cache中没有该Key的项目,表名用户没有登录,或者已经登录超时
//注意下面使用的TimeSpan构造函数重载版本的方法,是进行是否登录判断的关键。
TimeSpanSessTimeOut=newTimeSpan(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="<h4style='color:red'>嗨!欢迎您访问<ahref='http://www.21asp.net/'>www.21asp.net";
Msg.Text+="</a>,祝您浏览愉快!:)</h4>";
}
else
{
//在Cache中发现该用户的记录,表名已经登录过,禁止再次登录
Msg.Text="<h4style='color:red'>抱歉,您好像已经登录了呀:-(</h4>";
return;
}
}
}
}

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章