假设我在某个时间点从本地服务应用程序调用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. 唯一实例会话ID是否在程序中生效?
- 4. 获得唯一ID列表
- 5. 是否有可能在rails中获得新会话的id?
- 6. 通过ID获得会话
- 7. surveymonkey api是否返回与其唯一ID规范关联的唯一ID?
- 8. XMLHttpRequest和唯一会话ID PHP
- 9. ASP.NET会话ID - 跨服务器唯一
- 10. 检索SSH唯一会话ID
- 11. 在Coldfusion中启动会话并分配唯一的会话ID
- 12. 获取iPhones唯一ID的API?
- 13. 在Sinatra中获取唯一的会话ID
- 14. 如何获得视频的唯一ID
- 15. 如何获得唯一的推送ID
- 16. jQuery选择获得唯一的ID
- 17. 在Android设备上是否有唯一的启动会话ID或计数?
- 18. Dropbox API - 文件ID是唯一的吗?
- 19. 什么是生成唯一会话ID的最佳方式?
- 20. 如何在远程机器上获得会话的会话ID?
- 21. 如何获得会话ID在C#
- 22. 是否有可能获得附近的蓝牙设备的唯一ID?
- 23. randomUUID是否提供唯一的ID?
- 24. 贝宝的令牌ID是否唯一?
- 25. 是否有文件的唯一ID?
- 26. 是否可以在可可上获得唯一的iCloud用户ID?
- 27. 是否可以根据asp.net中的会话ID获取会话信息?
- 28. Facebook:PHP图表api获得NULL会话
- 29. 获取会话ID
- 30. Rdio桌面API是否提供跟踪唯一ID?
你会考虑改变状态吗?如果用户登录并且现在被锁定,您是否会说会话处于相同状态? – ixe013