由於某些原因
在我們的應用中會遇到一個用戶只能在一個地方登錄的情況
也就是我們通常所說的單點登錄
在ASP
NET中實現單點登錄其實很簡單
下面就把主要的方法和全部代碼進行分析
實現思路 利用Cache的功能
我們把用戶的登錄信息保存在Cache中
並設置過期時間為Session失效的時間
因此
一旦Session失效
我們的Cache也過期
而Cache對所有的用戶都可以訪問
因此
用它保存用戶信息比數據庫來得方便
SingleLoginaspx代碼 <%@ Page language=
c#
Codebehind=
SingleLogin
aspx
cs
AutoEventWireup=
false
Inherits=
eMeng
Exam
SingleLogin
%>
<!DOCTYPE HTML PUBLIC
//W
C//DTD HTML
Transitional//EN
>
<HTML>
<HEAD>
<title>單點登錄測試</title>
<meta http
equiv=
Content
Type
content=
text/html; charset=gb
>
<meta http
equiv=
Author
content=
孟子E章
>
<meta /
>
<style>
H
{ FONT:
px 宋體 }
INPUT { FONT:
px 宋體 }
SPAN { FONT:
px 宋體 }
P { FONT:
px 宋體 }
H
{ FONT:
px 宋體 }
</style>
</HEAD>
<body MS_POSITIONING=
GridLayout
>
<form id=
Form
method=
post
runat=
server
>
<div align=
center
>
<h
>單點登錄測試</h
>
<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>
SingleLoginaspxcs代碼 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)
{
// 實際例子可訪問
// /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(
System
Web
HttpContext
Current
Session
Timeout
);
HttpContext
Current
Cache
Insert(sKey
sKey
null
DateTime
MaxValue
SessTimeOut
System
Web
Caching
CacheItemPriority
NotRemovable
null);
Session[
User
] = sKey;
// 首次登錄
您可以做您想做的工作了
Msg
Text=
<h
style=
color:red
>嗨!歡迎您訪問<a >【孟憲會之精彩世界】
Msg
Text +=
</a>
祝您浏覽愉快!
)</h
>
;
}
else
{
// 在 Cache 中發現該用戶的記錄
表名已經登錄過
禁止再次登錄
Msg
Text=
<h
style=
color:red
>抱歉
您好像已經登錄了呀
-(</h
>
;
return;
}
}
}
}
From:http://tw.wingwit.com/Article/program/net/201311/11666.html