如何在用户关闭浏览器时注销

时间:2016-09-11 22:50:19

标签: javascript php jquery session

在用户和密码正确更新用户设置标志1后,我有一个带登录系统的网站,不允许其他人同时与该用户连接

$sql="update user set flag = 1 where id_user =".$_SESSION['id_user'];

我有一个logout.php,当我点击退出按钮时,我将标志重置为0,但我还想在用户关闭浏览器时将标志更改为0。

我试图解决它: javascript / jquery onbeforeunload卸载和 会议陷入困境但我失败了

3 个答案:

答案 0 :(得分:1)

你不能这样做。

登录后,您应检查会话存储区是否有请求登录的用户的会话。这当然需要一个你可以实际检查的会话商店,即。在数据库中。

答案 1 :(得分:1)

我有一个建议用PHP解决,忘记了JavaScript

存储数据库中已记录用户的最后一个请求时间,可能在用户表的字段中以及cookie中(客户端)。因此,每次用户发出请求时,都要将用户表上的此字段更新为当前时间和cookie。

如果有人尝试与拥有flag = 1的用户建立联系,请验证上次请求时间。如果它是五分钟(或十分钟,或二十分钟或其他)分钟或更长时间,请允许登录。如果它少于此时间,则不允许。

如果允许,那么我们有两个人在系统中有一个会话,所以两个都被记录,这是一个问题。

要解决此问题,当其中任何人尝试查看该页面时,如果存储在cookie(客户端)中的最后一个请求时间与存储在数据库中的时间不同,那么销毁会话。如果相等,则允许导航,并再次更新上次请求时间(在cookie和数据库中)。

这个想法是五分钟(或十分钟,或二十分钟或其他什么)不活动的分钟意味着用户离开。

您还可以将session.gc_maxlifetime中的php.ini更改为较短的时间。例如,到五分钟,尝试:

session.gc_maxlifetime=300

更改php.ini后,重启Apache。

请参阅Default session time out in Apache and CentOS

答案 2 :(得分:0)

这样做是个坏主意。如果要检查用户登录,则需要更多参数,而不仅仅是标记用户登录。我同意@Helinton Mello,您可以在用户上次登录之前检查时间,如果用户在10分钟前登录,标志仍然为1,则可以授予他登录权限,但是如果用户在10分钟以内,则可以发出另一个通知例如“您已经登录,请联系您的管理网络”。