我的网站有一个登录脚本,用于检查mysql表中的用户数据。该表有几个列(名称、用户名、通行证等),最重要的(为了这个问题)是"用户名"one_answers"在线"列。"online"列是BOOL值(online为true时为1,false时为0)。当用户成功登录时,$_SESSION变量将设置为表中的数据,我使用以下命令将表中的"online"值从"0"更改为"1"。
mysql_query("UPDATE Members SET Online='1' Where UserName='$username' AND Online='0'");
脚本检查"online"的值,这样如果值为1,他们就无法登录,并返回一条消息,说明用户已经登录。
接下来,网站的每个页面都有一个"注销"链接,该链接运行一个脚本,取消设置所有$_SESSION变量,并将联机值从1更新回0。
mysql_query("UPDATE Members SET Online='0' Where UserName='$username' AND Online='1'");
这就是问题的根源。如果用户关闭浏览器窗口,由于php的工作方式,会话会自动结束,这很好,因为这是我想要的。但是,如果浏览器关闭,我也想更新该表。否则,当用户关闭浏览器时,由于其在线值仍然为1,他们将无法重新登录。我知道使用onunload或onbeforeunload是不起作用的,因为每次刷新或更改页面时都会运行。我知道我可能需要使用某种会话超时,但我看到的每个答案都不能完全解释如何进行。我通常只看到人们发布代码,而没有解释它的确切工作原理或应该如何使用。如果有人能帮我,我将不胜感激
提前感谢。
您应该使用AJAX自动刷新任何脚本,如果上次活动>5分钟->SQL查询。