国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - .NET 單點登錄解決方案

.NET 單點登錄解決方案

2019-11-19 13:33asp.net教程網 ASP.NET教程

這里指的單點,泛指在WEB服務端,一個賬戶同一時刻只能存在一個票據!怎么使同一個用戶,在同一時間內只允許登錄一次,下面將為大家詳細介紹下

這里指的單點,泛指在WEB服務端,一個賬戶同一時刻只能存在一個票據! 

大家開發中可能都碰到的一個問題,怎么使同一個用戶,在同一時間內只允許登錄一次。 

很多人都會想到在數據庫中用一個標識字段,登錄進去置1,退出置0,登錄時判斷這個字段,如果是1就說明此用戶在線,不允許登錄,這個方案看似有效,但在實際使用中發現問題很多,比如,用戶不是通過程序中的退出按紐退出,而是直接關閉IE,這樣的話,下次登錄時數據庫里此用戶還在線呢,這個用戶就無法登錄,當然也有一些辦法可以解決這個問題:增加一個定時作業,定期復位那些長時間在線的用戶,這樣又會造成一些問題,如果這個用戶實際上就是使用了這么長時間,那就是誤殺。 

通過多次實驗,發現.net本身可以提供這種解決方案。步驟如下: 

第一:建立global.asax文件, Session_End 事件中寫入如下代碼: 

復制代碼代碼如下:


Hashtable h = (Hashtable)Application["online"]; 
if (h[Session.SessionID] != null) 
h.Remove(Session.SessionID); 
Application["online"] = h; 


第二:修改web.config文件,在system.web 結點里面增加 

復制代碼代碼如下:


<sessionState mode="InProc"></sessionState> 


這個是為了使用global.asax中的session_end事件生效。 

第三:頁面的登錄事件中,判斷登錄用戶是否在服務端全局變量中存在,存在就不允許登錄,不存在就創建。以下是實現過程,登錄按紐的事件中調用。 

復制代碼代碼如下:


private void isLogin() 

Hashtable h = (Hashtable)Application["online"]; 

if (h == null) 

h = new Hashtable(); 


//驗證用戶是否在Application中存在(是否在線) 
IDictionaryEnumerator e1 = h.GetEnumerator(); 
bool flag = false; 
while (e1.MoveNext()) 

if (checkCookie(e1.Value.ToString())) 

flag = true; 
break; 


if (flag) 

Response.Write("<script defer language='javascript'>alert('This user is online!');history.go(-1);</script>"); 

else 

loginLogic login = new loginLogic(this.txt_user_id.Text.Trim(), this.txt_password.Text.Trim()); 

if (!login.getLoginStatus) 

Response.Write("<script defer language='javascript'>alert('Invalid UserID or password.Please try again.');</script>"); 

else 

//生成服務端標識值 
DateTime now = DateTime.Now; 
string cookieValue = now.Year.ToString() + now.Month.ToString() + now.Day.ToString() + now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString() + now.Millisecond.ToString(); 
//把userid + 標識值寫入全局變量表 
h[Session.SessionID] = this.txt_user_id.Text.Trim() + "-" + cookieValue; 
Application["Online"] = h; 
//把標識值寫入客戶端cookie 
Response.Cookies["hqs"].Value =cookieValue; 
Response.Cookies["hqs"].Expires = DateTime.Now.AddDays(1); 

//用戶信息記入session 
Session["userid"] = this.txt_user_id.Text.Trim(); 
Response.Redirect("Manage/index.aspx"); 




private bool checkCookie(string appValue) 

bool isExist = false; 

if (Request.Cookies["hqs"] != null) 

string cookieValue = Request.Cookies["hqs"].Value; 

char[] sp = new char[1]{'-'}; 
string appUserid = appValue.Split(sp)[0].ToString(); 
string appCookie = appValue.Split(sp)[1].ToString(); 

if (appUserid == this.txt_user_id.Text.Trim() && appCookie != cookieValue) 
isExist = true; 

return isExist; 


注意:在VS2005的內置WEB服務器中測試可能有問題,還在放在IIS的正式環境中去測試. 

關于此方案的說明:一般情況下session 的timeout時間為20分鐘,也就是說,如果這個用戶直接關掉瀏覽器,然后馬上再登錄,這個時間session還沒有到期,所有不會觸發global.asax中的session_end事件,所以會提示這個用戶還在線,20分鐘后這個事件執行過后,會刪掉這個不活動的用戶,這時候再登錄就正常了。所以不要認為直接關掉IE后,再登錄進不去了,就認為這個方案無效。 

當然,session 的timeout 時間可以修改的,20分鐘不合適可以改。改法如下: 

<sessionState mode="InProc" timeout="你認為合適的值"></sessionState> 

------------------------ 

續上篇,現在有新的問題了,如果用戶非正常退出那么,session在20分鐘內不會執行END事件,也就是說用戶還是在線狀態,那么此用戶再次登錄將不被允許。這顯然有點不合理。這個方案就顯得不夠完美了,希望大家補充。 

補充:第三步的代碼已更新,可以解決這個問題 

二、 由于某些原因,在我們的應用中會遇到一個用戶只能在一個地方登錄的情況,也就是我們通常所說的單點登錄。在ASP.NET中實現單點登錄其實很簡單,下面就把主要的方法和全部代碼進行分析。 

實現思路 

利用Cache的功能,我們把用戶的登錄信息保存在Cache中,并設置過期時間為Session失效的時間,因此,一旦Session失效,我們的Cache也過期;而Cache對所有的用戶都可以訪問,因此,用它保存用戶信息比數據庫來得方便。 

程序代碼 

復制代碼代碼如下:


string sKey = username.Text.ToString().Trim(); // 得到Cache中的給定Key的值 
string sUser = Convert.ToString(Cache[sKey]); // 檢查是否存在 
if (sUser == null || sUser == String.Empty) 


TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);//取得Session的過期時間 
HttpContext.Current.Cache.Insert(sKey, sKey, null, DateTime.MaxValue, SessTimeOut, System.Web.Caching.CacheItemPriority.NotRemovable, null);//將值放入cache己方便單點登錄 
//成功登錄 

else if (Cache[sKey].ToString() == sKey)//如果這個賬號已經登錄 

ClientScript.RegisterStartupScript(GetType(), "提示", "<script>alert('對不起,當前用戶已經登錄');</script>"); 
return; 

else 

Session.Abandon();//這段主要是為了避免不必要的錯誤導致不能登錄 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成年人免费在线播放视频 | www.五月婷| chengrenzaixian| 一级片黄色大片 | 欧美日韩国产影院 | 欧美日韩亚洲一区 | 欧美精品在线观看 | 中文字幕成人 | 污污视频免费网站 | 91色在线观看 | 国产欧美综合一区二区三区 | 北条麻妃一区二区三区中文字幕 | 久久天天 | 一区二区三区日韩 | 噜噜噜视频在线观看 | 亚洲天堂久久 | 国产精品久久久久久久久久久久久久 | 激情五月婷婷丁香 | 成人av一区二区三区 | 成年网站在线 | av在线官网 | 中文字幕视频在线观看 | 免费看黄色大片 | 欧美一级在线 | 亚洲成人av | 久久综合久久综合久久综合 | 亚洲伦乱视频 | 日韩一区在线播放 | 一级电影毛片 | 亚洲午夜激情 | 全部免费毛片在线播放 | 中文字幕免费观看 | 国产欧美日韩在线观看 | 亚洲影视在线 | 欧美中文在线 | 国产精品99久久久久久久vr | 午夜精品一区二区三区在线观看 | 久久精品视频网站 | 国产色区 | 在线观看中文字幕 | 一级欧美|