2014-01-29 119 views
0

我需要顯示用戶登錄時間details.I有兩個table.One是UserMaster其中包含UserDetails和一個是UserLogInTimeDetails包含兩列UserId和LogedInTime。 用戶登錄UserId和LogInTime時存儲在UserLogInTimeDetails中。 用戶註銷時我從UserLogInTimeDetails中刪除該特定用戶的行。顯示登錄用戶時間的詳細信息

但問題是如果用戶關閉瀏覽器,那麼用戶的詳細信息不會從UserLogInTimeDetails表中刪除,對於該用戶將無法再次登錄。

如何解決這個問題? 我google了,看到瀏覽器關閉事件不可能處理,並在很多地方他們建議使用onbeforeunload事件,這是不適合我的工作。

請幫忙。我遇到了很大的麻煩。

+0

請問您可以粘貼代碼。到目前爲止你做了什麼? –

+0

這是一個經典的問題,可能你最好的辦法是擁有某種LastActivity,並把它定時出來 – Liath

+0

不要在標題中加入標籤! –

回答

0

也許你可以在你的global.asax文件中使用Session_End來使它工作,以在用戶的​​會話過期時刪除用戶。儘管我不能100%確定您是否可以通過此方法獲取會話ID。這可能是EventArgs的內...

void Session_End(Object sender, EventArgs e) { 
    //Remove user from database here 
} 

否則,存儲數據的另一種方式是根據過去的活動,所以每次用戶提交更新最後一次活動的時間的請求。你甚至可以在數據庫中存儲一個會話ID以及它們的登錄時間,然後能夠計算該會話從登錄時間到最後一個活動的活動持續時間;

0

重要的是用戶無法從不同的瀏覽器多次登錄?

如果不是,更常見的方法是在會話變量(可能是登錄時間,用戶ID或類似的東西)中存儲登錄信息變量,並用它來驗證用戶是否已登錄。

如果用戶關閉瀏覽器會話丟失,他必須再次登錄,但他可以根據需要從不同的瀏覽器多次登錄。

您可以像這樣訪問這些變量:

// Set it like this. Can be any type of object with login data. 
Session["LoginData"] = "Hello"; 

// Get it like this. 
string test = (string)Session["LoginData"]; 

編輯: 如果用戶必須登錄NOG多次重要的是,你必須解決一個更大的問題。 也許這樣的東西可能是解決方案?

  • 讓瀏覽器(通過ajax)每隔幾秒鐘左右ping一次web服務器(多少取決於您希望關閉瀏覽器多長時間才能再次登錄與流量)
  • 當服務器收到來自某個用戶的ping時,在會話變量中標記日期和時間。
  • 如果瀏覽器嘗試以任何方式訪問網頁,請首先檢查會話以及最近一次ping完成的時間。如果會話爲空,或者時間超過ping * 2之間的時間(或類似的情況),用戶可以再次登錄(發送到登錄頁面)。如果時間較短,請檢查用戶是否已登錄。如果他是,請繼續。如果沒有,告訴他他必須從第一個連接(或任何你想要的)註銷。

希望這有助於!

+0

沒有一個用戶每次只能登錄一次 – user3193557

+0

好的,我非常抱歉,但由於今天的網絡並不是一個數據流(如在TCP/IP連接中),我相信它這很難實現。服務器不知道用戶關閉瀏覽器的時間。 – einord

+0

user3193557:我編輯了用戶必須僅登錄一次的方法的註釋。 – einord

0

最好的方法去與此使用signalR。您可以跟蹤用戶在線或離線。基於即使處置你也可以跟蹤確切的註銷或瀏覽器。

希望這會教你一些新的東西。請參閱下面的鏈接,瞭解signalR的一個簡單例子。

signalR sample application for online, offline status