PHP - 清除缓存后维护cookie

时间:2015-05-18 16:04:54

标签: php cookies

如果某个页面每天访问过多次,我会限制对该页面的访问,因此我执行了以下操作:

<?php

    if(! isset($_COOKIE["VisitCount"])){
        setcookie("VisitCount", "1", strtotime('today 23:59'));
    }

    if($_COOKIE["VisitCount"] > 1){
        echo "<script>alert('You can only play once a day'); location.href='http://example.com';</script>";
        exit();
    }
    else {
        setcookie("VisitCount", ($_COOKIE["VisitCount"] + 1), strtotime('today 23:59'));
    }

?>

但是用户可以清除缓存并再次输入该页面。如何更改它以便用户在当天的剩余时间内被阻止?

编辑:

我在我的桌子上添加了一个'时间'列,我想我必须使用If语句检查上一次是否在过去24小时内,但我不知道该怎么做。

此外,访问限制为每天一次,但不是每24小时一次,因为它应该在午夜重置,这是否需要不同的代码?或者我上面提供的那个可以工作(稍加修改)?

2 个答案:

答案 0 :(得分:0)

客户端日志记录不是限制某些内容的好主意。您必须使用客户端的唯一属性将其限制在服务器端。

为此,您应该使用客户端的IP地址并将其写入具有最后访问时间戳的数据库表中。当然,用户可能会改变他的IP地址,但这比删除cookie /缓存更困难。

没有给出IP地址的另一种可能性 - 操作非常容易。没有100%的机会限制一个请求/行动。

答案 1 :(得分:0)

简短的回答是,您无法执行此类限制。

只有在用户不删除cookie时才使用cookie。

其他客户端存储数据也是如此。

您可以(非常)让某人使用evercookies or browser fingerprinting

删除与客户关联的标识符更加困难

您无法使用IP地址(免费WIFI无处不在,使用Tor,您甚至不需要散步)。

您可以强制用户注册电子邮件地址并要求验证电子邮件地址(通过电子邮件将OTP发送到该地址),但是每天只能为每个电子邮件地址强制执行一个游戏 - 这有多难获得免费的电子邮件地址?