PHP中的登录/注销问题

时间:2010-06-02 07:45:27

标签: php mysql

我有一个问题。 我有一个网站,其中我提供安全性,如登录ID和密码(像往常一样)。不,我想要的是, 1)我不想让一个用户同时登录不同的机器。 2)为此我在数据库中使用一个列保持用户的当前状态(即登录/注销)。我允许用户仅在会话未关闭且状态为登录时才登录。 3)所以我的问题是当我手动注销时。它正在关闭会话以及更新状态为“logout”的数据库。 4)但是当我从Cross button右上角关闭窗口时。它正在关闭ssion,但表数据仍然是“登录”。所以后来我无法登录同一个用户。 5)那么我怎么能解决这个问题呢。 请帮帮我!

4 个答案:

答案 0 :(得分:3)

做另一种方式。
不要禁止访问。只需手动记录前一个。
像ICQ或其他聪明的信使一样。

为此,请将会话ID保留在用户的表中。一旦更改 - 提示登录。

答案 1 :(得分:2)

  

1)我不想允许单个用户   登录到不同的机器   同一时间。

每次用户尝试登录时,请检查是否已设置会话。您可以通过将unix时间戳的哈希值保存到与用户关联的数据库以及每次用户登录时将哈希设置为会话来执行此操作。一旦用户再次登录,您将创建一个新的哈希,它将覆盖数据库中的旧哈希。

然后在所有受保护的文件中,您可以将会话哈希变量与数据库中的哈希变量进行比较。如果不匹配,请将用户注销 - 但新登录实例仍将保持活动状态。

  

2 + 3 + 4)为此,我使用的是   数据库中保留的列   用户的当前状态(即   登录电子/注销)。我允许用户   只有当会话没有时才登录   已关闭且状态为登录。所以我的   问题是,当我退出时   手动。它正在关闭会议   以及使用更新数据库   状态“退出”。但是当我关闭时   从十字扣顶部的窗口   右上角。它正在关闭ssion   但表数据仍然是“登录”。所以   后来我无法登录   同一个用户。

为此,您必须保存最后一个活动的unix时间戳。在“退出”用户之前,您还需要花费一些时间 - 通常是一小时或3600秒。在某些页面上使用cron作业或包含文件,您可以检查用户的时间并进行比较if(time - last_active_time > 3600){your_logout_func();}

5)那么我怎么能解决这个问题呢。请帮帮我!

上述操作可以解决您的问题,但当然有很多方法可以解决它:)

答案 2 :(得分:0)

你可以尝试这样的事情:

<html>
<head>
<script type="text/javascript">
function logout(){
window.open("http://www.yoursite.com/logout.php","_blank");
}
</script>
</head>

<body onunload="logout()">
</body>

</body>

</html> 

答案 3 :(得分:0)

您还可以运行cron作业,定期检查用户的状态。例如,如果用户上次“做某事”的距离太远,那么您可以让脚本将用户注销。

这将涉及跟踪用户的状态......也许是一个检查页面视图的简单表。