允许一次只登录一个用户

时间:2010-02-02 17:25:31

标签: login singleton

在我们的系统中,一个客户端可能有多个运营商。然而,客户有一个“愿望”。 一家公司有一个帐户,但是可以为该公司分配多个运营商。客户希望我们准备一个解决方案,只有一个公司的运营商可以同时登录系统。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

只需确保他们的系统能够验证每个请求的登录信息。

  1. 主动(通过查询状态 - 可能是数据库来比较一些秘密)或
  2. 被动 - 使用某种形式的加密和令牌(可能在cookie中)。
  3. 选项一最简单,选项2最快。如果您对每个请求进行验证,则可以确保只有一个用户仍然登录 - 如果另一个用户登录,则可以使现有的活动登录失效 - 可能的冷却时间为n分钟。

    你必须开发某种形式的登录方案 - kerberos是事实上的计划 - 阅读关于kerberos的这个易于理解的教程Designing an Authentication System: a Dialogue in Four Scenes它应该向你展示你真正需要什么做。

答案 1 :(得分:1)

您可以使用数据库字段来标记他们已登录。当他们这样做时,将字段更新为“登录”,然后在他们注销时将其更新为“已注销”。

如果用户从不打算明确注销,您还需要监控登录会话的到期时间以更新字段。

答案 2 :(得分:1)

我用过的最佳方法:

  1. 创建一个用于跟踪运营商是否已登录的表(例如userid和last_accessed_dt)
  2. 操作员在每页请求时更新上次请求的日期/时间
  3. 当操作员尝试登录时,他们只能在最后请求的数据/时间>您网站上的会话超时期限(例如30分钟)或者如果它们是最后的运营商用户ID ...这样他们就可以快速从注销等恢复。
  4. 当操作员注销时,上次访问已清除
  5. 当会话超时时,上次访问已清除

答案 3 :(得分:0)

“我正在使用WPF应用程序并且服务器是用WCF编写的,但这可以实现。但是当用户打开一个应用程序并且在30分钟内处于非活动状态时会出现什么情况?”

此系统将是单用户,因此我建议您在用户登录时启动计数器线程。当计数器达到30分钟时,向数据库写入一个值,表示用户已超时且其他用户是免费的登录。显然,当用户明确注销时,你应该做同样的事情。