如何在php中限制用户每天登录多次

时间:2012-08-30 04:54:29

标签: php mysql

有没有办法限制用户不要每天登录一次。这可能在PHP?如果是这样,你能指导我怎么做吗?

在我的数据库中,我有用户名和密码字段以及时间戳?我应该添加更多内容?

我试过了,但问题是我不希望它限制 IP 并且应该尊重用户。

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("");

mysql_query("delete from restrict where time >= " . time() + (24*3600));

$result = mysql_query("select * from restrict where ip =\"{$_SERVER['REMOTE_ADDR'}\"");

if(mysql_num_rows($result) == 0) {
$sql = "insert into restrict values('', '{$_SERVER['REMOTE_ADDR']}', '" . time() . "')";
mysql_query($sql);
} else {
die("You cannot access this page for 24hrs after you viewed it last...");
}

mysql_close();
?> 

对此有任何帮助将不胜感激。

谢谢!

5 个答案:

答案 0 :(得分:2)

你是不正确的,你不应该通过IP地址限制。一些原因包括:

  • 有些用户可以通过智能手机走路或重新启动路由器来获取新的IP地址。
  • 某些IP地址由很多用户共享。一些AOL IP地址由成千上万的AOL用户(代理网关)共享。

如果您有上次成功登录的时间戳,只需检查该用户是否有先前的登录信息,如果是,请在登录时多长时间才登录。

请注意,此方案中的任何内容都不会阻止用户保持登录,只要他们愿意,但他们必须与网站进行交互(亲自或使用机器人)经常出现以防止会话超时)。

答案 1 :(得分:1)

我只是将一个像“lastLoginTime”这样的列添加到login / users / whatever表中,并在用户登录时更新该时间。然后在登录时检查它以查看他们登录的时间,lastLoginTime,是在最后12/24 /任何时间内。

答案 2 :(得分:1)

您只需查询时间戳大于24小时的位置。

$sql = "SELECT COUNT(1) FROM `users` WHERE `timestamp` >= DATE_SUB(NOW(), INTERVAL 1 DAY)";

如果有结果,请不要让他们进去。

这假设您有一个带有时间戳字段的用户表,该字段在用户登录时会更新。我不知道您在帖子中对整个限制表做了什么。

但这是一个有缺陷的系统。如果出现问题,你应该存储一个cookie或者某些东西,并且在你完成所服务的任何事情之前,它们会被注销,发生一些事情等等。当然,在不知道你真正想要做什么的情况下,我知道什么?

答案 3 :(得分:1)

是的,你可以像你说的那样单独表格

id_user | date

两个整数

$db = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM `restrict` WHERE `id_user`=:id_user");
$stmt->execute(array(':id_user' => $_POST['username']));
$exist = $stmt->rowCount();
if(!$exist){
    $stmt = $db->prepare("INSERT INTO `restrict` VALUES(:id_user,:date)");
    $stmt->execute(array(':id_user' => $_POST['username']), ':date' => date('Ymd'));
} else {
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if($row['date'] != date('Ymd')){
        $stmt = $db->prepare("UPDATE `restrict` SET `date`=:date WHERE `id_user`=:id_user)");
        $stmt->execute(array(':id_user' => $_POST['username']), ':date' => date('Ymd'));
    } else {
        die("You already accessed this page today.");
    }
}

答案 4 :(得分:0)

您可以创建另一个名为last_login的列,您将在其中存储登录时间。下次用户尝试登录时,请检查last_login时间和当前时间之间的差异,如果小于24小时,请限制用户。