HI, 我做在C#(2.0)的Windows應用程序和SQL2005 Database.The網絡應用ERP溶液通信通過使用Database.I正常技術用於用戶登錄和註銷,保持一個狀態位。我的問題是,當我的應用程序因任何其他原因而中斷用戶狀態可能不會改變。這將導致用戶無法在下次登錄。如何解決此問題?你能給任何用戶操作的新技術嗎?用戶登錄技術C#運應用
回答
如果你的目的是要禁止不同計算機上的一個用戶名的共享,憑有效的密碼登錄後,登錄該計算機上的唯一令牌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
如何維持一個會話,每個登錄跟蹤用戶登錄的?快速而骯髒的解決方案是提供一個選項,讓他們從「新位置」登錄並使舊會話失效。然後,當您執行操作時,請首先檢查會話是否仍然有效。
更好的實現是保持會話活着,並指定超時。 (即,如果該會議是X-分鐘的時候,而無效。)然後,你將不會看到「幻影登錄」從舊孤立的連接 - 他們自動失效。
這裏有兩個共同的答案:
- 如果您嘗試登錄,並且已經登錄,提供突破(重置)現有登錄
- 使用輪詢/超時 - 即有該應用每2分鐘調用一次方法(例如)更新「最後一次聽到」;如果您在5分鐘內未收到任何人的訊息(例如),則清除標記
謝謝.... 我明白了,但連續檢查會讓我的應用變慢?數據庫放置在net.Hop你有更多的想法。 – Anoop 2009-01-08 08:25:18
爲什麼限制用戶可以登錄的次數?在Windows中,通常啓動應用程序的多個實例。
我必須承認,我在我的Windows應用程序也有隻有一個用戶被允許的一部分。要查看是否有其他用戶連接,我使用類似Marc的輪詢算法。有一個強制輸入的選項。
鎖記錄每分鐘一次,兩分鐘的更新是不是資源密集型的(除非你有成千上萬的用戶)。
- 1. OpenID與非技術人員使用的網站的自定義用戶登錄
- 2. 應用級複製技術
- 3. 應用規劃技術
- 4. 移動應用技術
- 5. C++技術新手
- 6. 在C#中使用客戶端服務器技術的Windows Store應用程序
- 7. SonarQube:無法創建用戶技術
- 8. 如果用戶關閉瀏覽器,是否有任何技術可以終止用戶登錄會話?
- 9. 使用推技術
- 10. 什麼GUI技術用於C#遊戲應用程序?
- 11. Web技術如何用於C++應用程序GUI?
- 12. Win32 API:與其他用戶一樣運行進程的用戶模擬技術?
- 13. Houseparty應用程序流媒體技術
- 14. 應用級負載均衡技術
- 15. 移動應用技術的信息
- 16. GUI應用程序中的Web技術
- 17. 10。我應該使用哪些技術?
- 18. Android Facebook SDK 4.0登錄:用戶登錄Facebook應用時出錯
- 19. 用curl登錄dropbox(用戶登錄)
- 20. 應用程序用戶和SQL登錄
- 21. 以登錄用戶身份運行cronjob
- 22. Joomla:用戶登錄後運行javascript
- 23. 紅寶石技術門戶
- 24. 客戶端Java Web技術
- 25. 如何運行非技術性啓動的技術部門?
- 26. 大型Web應用程序的客戶端技術
- 27. 登錄用C
- 28. C# - 用戶登錄只檢查用戶名的最新記錄
- 29. C#使用SQL登錄應用程序
- 30. C#中的別名技術?
我做的Windows應用程序沒有Web應用程序。 – Anoop 2009-01-08 08:21:53
@Anoop:會話不是Web特定的。登錄到Windows的用戶也可以稱爲會話 – GvS 2009-01-08 08:49:22
您能否給我一些更多的想法或關於會話的鏈接?我對此沒有太多的想法。 – Anoop 2009-01-08 08:59:42