欢迎光临
我们一直在努力

在ASP.NET 中实现单点登录-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

在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">

<meta http-equiv="author" content="孟子e章">

<meta http-equiv="website" content="http://dotnet.aspx.cc/">

<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)

{

// 实际例子可访问:

// http://dotnet.aspx.cc/exam/singlelogin.aspx

}

#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://dotnet.aspx.cc/>【孟宪会之精彩世界】";

msg.text += "</a>,祝您浏览愉快!:)</h4>";

}

else

{

// 在 cache 中发现该用户的记录,表名已经登录过,禁止再次登录

msg.text="<h4 style=color:red>抱歉,您好像已经登录了呀:-(</h4>";

return;

}

}

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在ASP.NET 中实现单点登录-.NET教程,Asp.Net开发
分享到: 更多 (0)