如何防止使用相同的用户名进行多次登录?

斑点

我正在开发可在本地网络上运行的应用程序。它在前端使用javafx 8,在后端使用Postgresql服务器。该数据库位于网络中的数据库服务器中。在服务器中,我们有一个表,用于存储用户详细信息,包括加密的密码和用户ID。我们使用此表来验证希望登录的用户。

现在,我们要防止来自网络中多台计算机的同一用户ID登录到该应用程序。为此,我们尝试loggedin在表中创建一个存储用户详细信息的列然后在该列中存储布尔值true和false。因此,当用户成功通过身份验证后,我们将true根据用户ID将其存储在column中loggedin当用户注销时,我们将更新到表以存储false在列中。

这个过程引起了一个新的问题。如果在没有用户注销的情况下关闭了该应用程序,则该用户将永远无法再次登录。同样,如果在未注销用户的情况下关闭了用户的计算机,也会得到相同的结果。并且如果由于某种原因重新启动了服务器,则所有已登录的用户将永远无法再次登录。

我试图找到其他解决方案,但找不到任何解决方案。如果有人可以给我其他建议,那将非常有帮助。

尼克·巴恩斯

如果您为每个用户赋予自己的数据库角色,则Postgres可以为您处理此任务(以及其余的身份验证过程):

CREATE USER <username> PASSWORD '<password>' CONNECTION LIMIT 1

这还有许多其他好处,例如通过授权行级策略进行细粒度的访问控制,以及访问范围更广的身份验证方法

如果这不是一个选择,则最简单的方法可能是在登录时获取会话级咨询锁,即:

SELECT pg_try_advisory_lock(<userid>)

true如果您成功获取了锁,或者其他人已经拥有了该锁,则将返回falseuserid值。一旦获得,该锁将在您的其余会话中保留,并在断开连接时自动释放。

请记住,您只是锁定一个任意数字,因此您需要确保没有其他过程出于不相关的原因而锁定相同的数字。管理此问题的一种常见方法是调用的两个参数的版本pg_try_advisory_lock(),并users通过传入表的内部标识符来将锁的作用域限定为表:

SELECT pg_try_advisory_lock('users'::regclass::int, <userid>)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何防止单个用户名多次登录

来自分类Dev

防止用户在Backendless中使用相同的用户名注册

来自分类Dev

如何防止PHP中使用相同的用户名(不区分大小写)?

来自分类Dev

如何发布数据用户名密码进行登录

来自分类Dev

如何发布数据用户名密码进行登录

来自分类Dev

如何显示使用AngularJs登录的MVC用户名

来自分类Dev

使用锚标记登录后如何显示用户名

来自分类Dev

如何显示使用AngularJs登录的MVC用户名

来自分类Dev

如何在laravel中使用用户名登录

来自分类Dev

如何控制不要使用相同的用户名注册

来自分类Dev

如何从.htpasswd登录用户名?

来自分类Dev

如何从.htpasswd登录用户名?

来自分类Dev

登录后如何打印用户名?

来自分类Dev

如何找出登录机器的用户名?

来自分类Dev

防止用户使用相同的用户名和电子邮件注册

来自分类Dev

使用adLDAP显示登录的用户名

来自分类Dev

如何使用$ _session []的用户名和密码进行搜索?

来自分类Dev

Grails:如何获取当前登录用户的用户名,以及需要进行哪些导入?

来自分类Dev

使用相同用户名Zend Framework 2的多个登录

来自分类Dev

如何添加用户名进行评论?

来自分类Dev

使用用户名登录或使用Cakephp 3登录

来自分类Dev

如何防止用户在用户名中使用非英语字母字符,例如“š,č,ć,ž,đ...等”?

来自分类Dev

如何检查是否已登录用户(使用JSTL <if>语句)并显示用户名?

来自分类Dev

流星:如何使用用户名或密码登录用户

来自分类Dev

如何使用django添加已登录用户的用户名

来自分类Dev

如何允许用户使用php中的用户名和电子邮件登录?

来自分类Dev

如何获取登录Jasper Server的用户的用户名?

来自分类Dev

如何获取当前Windows登录用户的用户名?

来自分类Dev

如何获取当前登录用户authservice的用户名

Related 相关文章

  1. 1

    如何防止单个用户名多次登录

  2. 2

    防止用户在Backendless中使用相同的用户名注册

  3. 3

    如何防止PHP中使用相同的用户名(不区分大小写)?

  4. 4

    如何发布数据用户名密码进行登录

  5. 5

    如何发布数据用户名密码进行登录

  6. 6

    如何显示使用AngularJs登录的MVC用户名

  7. 7

    使用锚标记登录后如何显示用户名

  8. 8

    如何显示使用AngularJs登录的MVC用户名

  9. 9

    如何在laravel中使用用户名登录

  10. 10

    如何控制不要使用相同的用户名注册

  11. 11

    如何从.htpasswd登录用户名?

  12. 12

    如何从.htpasswd登录用户名?

  13. 13

    登录后如何打印用户名?

  14. 14

    如何找出登录机器的用户名?

  15. 15

    防止用户使用相同的用户名和电子邮件注册

  16. 16

    使用adLDAP显示登录的用户名

  17. 17

    如何使用$ _session []的用户名和密码进行搜索?

  18. 18

    Grails:如何获取当前登录用户的用户名,以及需要进行哪些导入?

  19. 19

    使用相同用户名Zend Framework 2的多个登录

  20. 20

    如何添加用户名进行评论?

  21. 21

    使用用户名登录或使用Cakephp 3登录

  22. 22

    如何防止用户在用户名中使用非英语字母字符,例如“š,č,ć,ž,đ...等”?

  23. 23

    如何检查是否已登录用户(使用JSTL <if>语句)并显示用户名?

  24. 24

    流星:如何使用用户名或密码登录用户

  25. 25

    如何使用django添加已登录用户的用户名

  26. 26

    如何允许用户使用php中的用户名和电子邮件登录?

  27. 27

    如何获取登录Jasper Server的用户的用户名?

  28. 28

    如何获取当前Windows登录用户的用户名?

  29. 29

    如何获取当前登录用户authservice的用户名

热门标签

归档