如果数据库中存在会话,则拒绝登录

时间:2013-03-26 07:44:07

标签: php mysql

我的脚本中实现了一个php登录系统。如果数据库中存在现有会话,我将如何制作拒绝用户登录的脚本?

例如,

用户1登录系统>登录已接受 用户2使用与用户1相同的帐户登录系统。拒绝,因为存在另一个会话。

这就是我希望它的工作方式。

感谢。

5 个答案:

答案 0 :(得分:1)

将您的sessionId存储在您的数据库中,如果上次访问时间是最近的,则拒绝具有不同sessionID的用户的登录尝试(通过查找上次登录时间与当前时间之间的差异来计算)。注销时的清除ID

答案 1 :(得分:0)

您的users表中应该有一个名为logged_in的新字段。验证时,请检查此字段的值。

如果是0 / false,请让用户登录并将logged_in字段设置为1 / true。

否则,如果logged_in字段为1 / true,则不要让第二个用户登录。

注销时不要忘记将logged_in字段设置为0 / false。

答案 2 :(得分:0)

好问题。

如果您正在引用PHP会话:您可以将会话ID(和上次访问时间)存储在数据库中,并拒绝具有不同会话ID的用户的登录尝试(如果最后访问时间)太近了(比如,在过去20分钟内)。当然,在注销时清除ID。

但请注意,如果用户关闭浏览器而未注销然后重新打开,则可能会被锁定一段时间(上面20分钟或您决定的任何时间间隔),因为他们不会匹配的会话cookie了。

如果您要引用数据库会话:您必须在此link中配置Mysql DB中的Setting Account Resource Limits。但问题是,帐户与服务器同时连接的数量仅在MySQL 5.0.3中可用。

如果您要参考实时制作,那么您可以使用COMET Programming将数据推送到浏览器,而浏览器不会明确请求它。

答案 3 :(得分:0)

为此

您必须在数据库中存储session个值。然后当其他用户登录相同的细节时。你可以从已经有一个用户在线的数据库中检查它,并且具有相同的登录详细信息

答案 4 :(得分:0)

我会将另一个字段放入数据库中,例如last_seen。每次登录用户都会产生请求 - 只需将当前日期放入该字段。

当有人试图登录时 - 只需检查用户在网站上看到多长时间。如果超过会话超时时间(默认为20分钟) - 您可能会认为用户已注销并允许登录。

否则 - 拒绝登录。

您无法确定用户是否仍在使用您的网站或没有。用户登录/注销时,您可以在某个字段中放置1/0,但没有人可以保证用户在关闭标签页之前单击注销链接。

但是,当用户单击注销链接时,您可以通过将该新字段设置为null来改善网站的行为。否则可能会发生某人注销并现在尝试再次登录,但无法执行此操作,因为系统仍在处理其帐户使用。