假設我在某個時間點從本地服務應用程序調用WTSEnumerateSessions並獲取當前用戶會話ID的列表。所以如果稍後我需要知道某個特定的用戶會話是否仍然處於相同的狀態,我可以依靠WTS_SESSION_INFO::SessionId是唯一的嗎?如果沒有,如何做到這一點?WTSEnumerateSessions API獲得的會話ID是否唯一?
回答
Windows爲每個登錄會話提供一個SID。 MSDN has sample code to look it up,並且對於給定的登錄會話保證唯一且恆定。如果用戶註銷並重新登錄,他將被歸入新的登錄SID。
如果同一用戶在本地登錄並在同一位置進行遠程登錄,則每個登錄會話都會有一個不同的登錄SID。下圖顯示了我的意思:
。
(免責聲明 - 我偷了它從一個blog post of mine)
你可以用這個命令得到登錄SID。在不編寫任何代碼的情況下播放假設情景可能是有用的。
c:\>whoami /logonid
S-1-5-5-0-329693570
在Windows Server 2008上測試。在其他版本上的YMMV。
會話ID與安全ID不同。會話可能會有人在某個狀態下登錄,或者可能沒有人登錄。您可以調用WTSEnumerateSessions並發現有人在會話1登錄,稍後該人員可以註銷,稍後其他人可以登錄並且Windows可能會給他們會話1,然後再次調用WTSEnumerateSessions。因此,在經歷兩次更改並由不同用戶使用之前,狀態可能與之前相同。你稱這是獨一無二的嗎?我不知道你獨特的意思。
那麼有什麼方法可以在當時對所有登錄的用戶帳戶進行更具體的(即唯一的)引用? – c00000fd
會話ID被分配爲登錄時最低的未使用號碼。
因此,如果我有ID 1,然後註銷,並且您登錄,您將獲得ID 1,因爲1在登錄時可用。
如果我從未註銷過,由於ID 1正在使用中,您將獲得ID 2。如果我然後註銷,並且您留在下一個用戶將再次分配ID 1(不是3),因爲1是最低的未使用的數字。
那麼這個API返回的會話ID是什麼?該ID一旦返回就會失效,因爲在此期間,用戶可能已註銷,並且新用戶可能已登錄,並且新用戶將具有相同的會話ID ... – c00000fd
假設您要查詢ID,然後立即做出您需要的任何內容,例如向所有登錄用戶發送消息,您將調用WTSEnumerateSessions併爲每個結果立即調用[ WTSSendMessage](http://msdn.microsoft.com/en-us/library/windows/desktop/aa383842%28v=vs.85%29.aspx)。這兩種操作都需要一秒鐘的時間才能完成,而且很可能一個人不會登錄,而另一個人將在這兩個呼叫之間的秒數部分登錄。 –
另一個常見和有用的例子是如果我想要一個實用程序來記錄某人。我會調用一次WTSEnumerateSessions來填充我的UI,當用戶選擇註銷時,我再次調用WTSEnumerateSessions,我檢查用戶名和SessionID是否仍然與我在UI中顯示的相同(以防萬一用戶已經在間隔時間內註銷)然後我調用[WTSLogoffSession](http://msdn.microsoft.com/en-us/library/windows/desktop/aa383836%28v=vs.85%29.aspx)通過傳入剛剛檢查過的會話ID來註銷用戶,我知道這是有效的。 –
- 1. 獲得由唯一的ID
- 2. 瞭解來自WTSEnumerateSessions的會話信息
- 3. 是否有可能在rails中獲得新會話的id?
- 4. 通過ID獲得會話
- 5. 獲得唯一ID列表
- 6. surveymonkey api是否返回與其唯一ID規範關聯的唯一ID?
- 7. XMLHttpRequest和唯一會話ID PHP
- 8. 檢索SSH唯一會話ID
- 9. ASP.NET會話ID - 跨服務器唯一
- 10. 在Coldfusion中啓動會話並分配唯一的會話ID
- 11. 獲取iPhones唯一ID的API?
- 12. 在服務器端獲取唯一的會話ID /密鑰
- 13. 在Sinatra中獲取唯一的會話ID
- 14. 在codeigniter中獲取唯一的會話ID
- 15. 如何獲得視頻的唯一ID
- 16. 如何獲得唯一的推送ID
- 17. jQuery選擇獲得唯一的ID
- 18. 在Android設備上是否有唯一的啓動會話ID或計數?
- 19. 什麼是生成唯一會話ID的最佳方式?
- 20. Dropbox API - 文件ID是唯一的嗎?
- 21. 如何在遠程機器上獲得會話的會話ID?
- 22. 如何獲得會話ID在C#
- 23. 是否有可能獲得附近的藍牙設備的唯一ID?
- 24. 貝寶的令牌ID是否唯一?
- 25. 是否有文件的唯一ID?
- 26. randomUUID是否提供唯一的ID?
- 27. 是否可以在可可上獲得唯一的iCloud用戶ID?
- 28. 是否可以根據asp.net中的會話ID獲取會話信息?
- 29. 獲取會話ID
- 30. Facebook:PHP圖表api獲得NULL會話
你會考慮改變狀態嗎?如果用戶登錄並且現在被鎖定,您是否會說會話處於相同狀態? – ixe013