熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

小技巧:在ASP.NET 中實現單點登錄

2013-11-13 09:49:11  來源: .NET編程 

  由於某些原因在我們的應用中會遇到一個用戶只能在一個地方登錄的情況也就是我們通常所說的單點登錄在ASPNET中實現單點登錄其實很簡單下面就把主要的方法和全部代碼進行分析
  
  實現思路
  
  利用Cache的功能我們把用戶的登錄信息保存在Cache中並設置過期時間為Session失效的時間因此一旦Session失效我們的Cache也過期而Cache對所有的用戶都可以訪問因此用它保存用戶信息比數據庫來得方便
  
  SingleLoginaspx代碼
  
  <%@ Page language=c# Codebehind=SingleLoginaspxcs AutoEventWireup=false
   Inherits=eMengExamSingleLogin %>
  <!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN >
  <HTML>
  <HEAD>
  <title>單點登錄測試</title>
  <meta httpequiv=ContentType content=text/html; charset=gb>
  <meta httpequiv=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 SystemCollections;
  using SystemComponentModel;
  using SystemData;
  using SystemDrawing;
  using SystemWeb;
  using SystemWebSessionState;
  using SystemWebUI;
  using SystemWebUIWebControls;
  using SystemWebUIHtmlControls;
  
  namespace eMengExam
  {
  /// <summary>
  /// SingleLogin 的摘要說明
  /// 實現單點登錄
  /// </summary>
  public class SingleLogin : SystemWebUIPage
  {
  protected SystemWebUIWebControlsTextBox UserName;
  protected SystemWebUIWebControlsTextBox PassWord;
  protected SystemWebUIWebControlsLabel Msg;
  protected SystemWebUIWebControlsButton Login;
  
  private void Page_Load(object sender SystemEventArgs e)
  {
   // 實際例子可訪問
   // /Exam/SingleLoginaspx
  }
  
  #region Web 窗體設計器生成的代碼
  override protected void OnInit(EventArgs e)
  {
   InitializeComponent();
   baseOnInit(e);
  }
  
  /// <summary>
  /// 設計器支持所需的方法 不要使用代碼編輯器修改
  /// 此方法的內容
  /// </summary>
  private void InitializeComponent()
  {
   thisLoginClick += new SystemEventHandler(thisLogin_Click);
   thisLoad += new SystemEventHandler(thisPage_Load);
  }
  #endregion
  
  private void Login_Click(object sender SystemEventArgs e)
  {
   // 作為唯一標識的Key應該是唯一的這可根據需要自己設定規則
   // 做為測試這裡用用戶名和密碼的組合來做標識也不進行其它的錯誤檢查
  
   // 生成Key
   string sKey = UserNameText + _ + PassWordText;
   // 得到Cache中的給定Key的值
   string sUser = ConvertToString(Cache[sKey]);
   // 檢查是否存在
   if (sUser == null || sUser == StringEmpty)
   {
    // Cache中沒有該Key的項目表名用戶沒有登錄或者已經登錄超時
    // 注意下面使用的TimeSpan構造函數重載版本的方法是進行是否登錄判斷的關鍵
    TimeSpan SessTimeOut = new TimeSpan(SystemWebHttpContextCurrentSessionTimeout);
    HttpContextCurrentCacheInsert(sKeysKeynullDateTimeMaxValueSessTimeOut
     SystemWebCachingCacheItemPriorityNotRemovablenull);
    Session[User] = sKey;
    // 首次登錄您可以做您想做的工作了
    MsgText=<h style=color:red>嗨!歡迎您訪問<a >【孟憲會之精彩世界】
    MsgText += </a>祝您浏覽愉快!)</h>;
   }
   else
   {
    // 在 Cache 中發現該用戶的記錄表名已經登錄過禁止再次登錄
    MsgText=<h style=color:red>抱歉您好像已經登錄了呀-(</h>;
    return;
   }
  }
  }
  }
  

From:http://tw.wingwit.com/Article/program/net/201311/11666.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.