2009-01-08 71 views
1

HI, 我做在C#(2.0)的Windows應用程序和SQL2005 Database.The網絡應用ERP溶液通信通過使用Database.I正常技術用於用戶登錄和註銷,保持一個狀態位。我的問題是,當我的應用程序因任何其他原因而中斷用戶狀態可能不會改變。這將導致用戶無法在下次登錄。如何解決此問題?你能給任何用戶操作的新技術嗎?用戶登錄技術C#運應用

回答

1

如果你的目的是要禁止不同計算機上的一個用戶名的共享,憑有效的密碼登錄後,登錄該計算機上的唯一令牌staff.last_logged_at = @unique_token。在註銷時,設置staff.last_logged_at =''。這種方式即使計算機被中斷(由於病毒程序崩潰,或意外按下了計算機的重置按鈕等,因此last_logged_at未被重置爲''),用戶仍可以登錄,只需檢查用戶當前登錄的計算機與last_logged_at相同。如果相同,他/她仍然可以登錄。



如果某些用戶嘗試使用其他用戶的用戶名登錄,只檢查,如果一些用戶的計算機的機器令牌是與其他用戶的last_logged_at一樣,如果它是不相等的,會禁止登錄,這意味着兩個用戶共享相同的密碼。



現在,如果電腦死機真的很難方案(處理器融化,硬盤崩潰,操作系統需要重新安裝,等)。用戶必須被允許使用其他計算機。製作一個管理模塊,可以重置該用戶的last_logged_at。



對於@unique_token,只需使用任何爲獨特的計算機上永久,讓我們說MAC地址,或哈希在操作系統設置任何東西。



僞代碼:

Logging In: 

if (select count(*) from staff where staff_name = @staff_name and password = 'correct' and (last_logged_at = '' or last_logged_at = @unique_token)) <> 0 then then 

    -- allow login   
    update staff set last_logged_at = @unique_token where staff_name = @staff_name 



else if (select count(*) from staff where staff_name = @staff_name and password = 'correct' and last_logged_at <> @unique_token) <> 0 then then 

    -- disallow login 
    throw exception "You cannot use the same user name on two or more computers. Contact the administrator if you have any concerns" 

else 

    -- disallow login 
    throw exception "Wrong password" 

end if 


Logging Out: 

update staff set last_logged_at = '' where staff_name = @staff_name 
2

如何維持一個會話,每個登錄跟蹤用戶登錄的?快速而骯髒的解決方案是提供一個選項,讓他們從「新位置」登錄並使舊會話失效。然後,當您執行操作時,請首先檢查會話是否仍然有效。

更好的實現是保持會話活着,並指定超時。 (即,如果該會議是X-分鐘的時候,而無效。)然後,你將不會看到「幻影登錄」從舊孤立的連接 - 他們自動失效。

+0

我做的Windows應用程序沒有Web應用程序。 – Anoop 2009-01-08 08:21:53

+0

@Anoop:會話不是Web特定的。登錄到Windows的用戶也可以稱爲會話 – GvS 2009-01-08 08:49:22

+0

您能否給我一些更多的想法或關於會話的鏈接?我對此沒有太多的想法。 – Anoop 2009-01-08 08:59:42

1

這裏有兩個共同的答案:

  • 如果您嘗試登錄,並且已經登錄,提供突破(重置)現有登錄
  • 使用輪詢/超時 - 即有該應用每2分鐘調用一次方法(例如)更新「最後一次聽到」;如果您在5分鐘內未收到任何人的訊息(例如),則清除標記
+0

謝謝.... 我明白了,但連續檢查會讓我的應用變慢?數據庫放置在net.Hop你有更多的想法。 – Anoop 2009-01-08 08:25:18

0

爲什麼限制用戶可以登錄的次數?在Windows中,通常啓動應用程序的多個實例。

我必須承認,我在我的Windows應用程序也有隻有一個用戶被允許的一部分。要查看是否有其他用戶連接,我使用類似Marc的輪詢算法。有一個強制輸入的選項。

鎖記錄每分鐘一次,兩分鐘的更新是不是資源密集型的(除非你有成千上萬的用戶)。