程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#有用避免統一賬號屢次登錄(附三種辦法)

C#有用避免統一賬號屢次登錄(附三種辦法)

編輯:C#入門知識

C#有用避免統一賬號屢次登錄(附三種辦法)。本站提示廣大學習愛好者:(C#有用避免統一賬號屢次登錄(附三種辦法))文章只能為提供參考,不一定能成為您想要的結果。以下是C#有用避免統一賬號屢次登錄(附三種辦法)正文


本文先為年夜家引見若何應用緩存Cache便利地完成此功效。
Cache與Session這二個狀況對像的個中有一個分歧的地方,Cache是一個全局對象,感化的規模是全部運用法式,一切用戶;
而Session是一個用戶會話對象,是部分對象,用於保留單個用戶的信息。
只需把每次用戶登錄後的用戶信息存儲在Cache中,把Cache的Key名設為用戶的登錄名,Cache的過時時光設置為Session的超不時間,在用戶每次登錄的時刻去斷定一下Cache[用戶名]能否有值,假如沒有值,證實該用戶沒有登錄,不然該用戶已登錄。
為年夜家舉一個例子吧。

/// <summary>
/// 避免屢次登錄
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button1_Click(object sender, System.EventArgs e)
{
string strUser = string.Empty;
string strCacheKey = this.TextBox1.Text;

strUser = Convert.ToString(Cache[strCacheKey]);

if (strUser == string.Empty)
{
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);

Cache.Insert(strCacheKey, strCacheKey, null, DateTime.MaxValue, SessTimeOut, CacheItemPriority.NotRemovable, null);
Session["User"] = strCacheKey;
this.Label1.Text = Session["User"].ToString();
}
else
{
this.Label1.Text = "這個用戶曾經登錄!";
}
}

在網上又找了下,發明了別的兩種處理計劃:
1、經由過程數據庫狀況位斷定該用戶能否曾經登錄。
2、應用session監聽器監聽每個登錄用戶的登錄情形。
第一種處理計劃很簡略,但須要斟酌用戶非正常加入的情形,如直接封閉閱讀器等等,可用性較低。
接上去,重要引見第二種計劃的詳細完成:應用session監聽器監聽每個登錄用戶的登錄情形。
A.用戶登錄後,先去數據庫查詢該登錄名能否存在、能否鎖定,在登錄名存在且非鎖定的情形下,從application內置感化域對象中掏出一切的登錄信息,檢查該登錄名能否曾經登錄,假如登錄了,就友愛提醒下;反之表現可以登錄,將該登錄信息保留在application中。
重要代碼以下:

//
//一切的登錄信息
Map<String, String> loginUserMap = (Map<String, String>) super.getApplicationAttr(Constant.LOGIN_USER_MAP);
boolean isExist = false;
String sessionId = super.getSessionId(false);
if(loginUserMap==null){
loginUserMap = new HashMap<String, String>();
}
for (String username : loginUserMap.keySet()) {
//斷定能否曾經保留該登錄用戶的信息,能否為統一個用戶停止反復登錄
if(!username.equals(user.getFuUserName()) || loginUserMap.containsValue(sessionId)){
continue;
}
isExist = true;
break;
}
if(isExist){
//該用戶已登錄
//
}else {
//該用戶沒有登錄
loginUserMap.put(result.getFuUserName(), sessionId);
//
}
//

B.登錄斟酌完以後,來斟酌斟酌加入。
用戶正常加入時,我們須要將該用戶的登錄信息從session中移除。我們可以寫一個Session監聽器,監聽sessioon燒毀的時刻,我們將登錄的用戶刊出失落,也就是從application中移除。表現該用戶曾經下線了。

重要代碼以下:

//
public void sessionDestroyed(HttpSessionEvent event) { 
  //  
  //在session燒毀的時刻 把loginUserMap中保留的鍵值對消除 
  User user = (User)event.getSession().getAttribute("loginUser"); 
  if(user!=null){ 
    Map<String, String> loginUserMap = (Map<String, String>)event.getSession().getServletContext().getAttribute("loginUserMap"); 
    loginUserMap.remove(user.getFuUserName()); 
event.getSession().getServletContext().setAttribute("loginUserMap",loginUserMap); 
  } 
  //
} 
//

別的,還有一個成績,假如說登錄的用戶忽然封閉了閱讀器而沒有點擊加入按鈕。那末可以應用beforeunload 事宜,在閱讀器刷新或許封閉的時刻觸發。

//在刷新或封閉時挪用的事宜
$(window).bind('beforeunload',function(){
 $.ajax({
  url:"${ctx}/system/user/user!logout.action",
  type:"post",
  success:function(){
   alert("您已加入登錄");
  }
 });
});

如許根本就完成了需求。
年夜家可以把下面代碼應用到本身的項目中,檢測一下,有用的避免統一賬號的反復登錄,願望年夜家愛好這些辦法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved