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

Asp.net中防止用戶多次登錄的方法[1]

2013-11-13 12:15:53  來源: .NET編程 

  在Web開發時有的系統要求同一個用戶在同一時間只能登錄一次也就是如果一個用戶已經登錄了在退出之前如果再次登錄的話需要報錯

    常見的處理方法是在用戶登錄時判斷此用戶是否已經在Application中存在如果存在就報錯不存在的話就加到Application中(Application是所有Session共有的整個web應用程序唯一的一個對象)

    以下是引用片段
  string strUserId = txtUserText;
  ArrayList list = ApplicationGet(GLOBAL_USER_LIST) as ArrayList;
  if (list == null)
  {
  list = new ArrayList();
  }
  for (int i = ; i < listCount; i++)
  {
  if (strUserId == (list[i] as string))
  {
  //已經登錄了提示錯誤信息
  lblErrorText = 此用戶已經登錄;
  return;
  }
  }
  listAdd(strUserId);
  ApplicationAdd(GLOBAL_USER_LIST list);

  當然這裡使用Cache等保存也可以

    接下來就是要在用戶退出的時候將此用戶從Application中去除我們可以在Globalasax的Session_End事件中處理

    以下是引用片段
  void Session_End(object sender EventArgs e)
  {
  // 在會話結束時運行的代碼
  // 注意: 只有在 Webconfig 文件中的 sessionstate 模式設置為
  // InProc 時才會引發 Session_End 事件如果會話模式設置為 StateServer
  // 或 SQLServer則不會引發該事件
  string strUserId = Session[SESSION_USER] as string;
  ArrayList list = ApplicationGet(GLOBAL_USER_LIST) as ArrayList;
  if (strUserId != null && list != null)
  {
  listRemove(strUserId);
  ApplicationAdd(GLOBAL_USER_LIST list);
  }
  }

    這些都沒有問題有問題的就是當用戶直接點浏覽器右上角的關閉按鈕時就有問題了因為直接關閉的話並不會立即觸發Session過期事件也就是關閉浏覽器後再來登錄就登不進去了

  這裡有兩種處理方式

  使用JavaScript方式

  在每一個頁面中加入一段javascript代碼

[]  []  


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