【问题标题】:How to limit the times a script can be run to some time on a particular ip address如何将脚本可以在特定 IP 地址上运行的时间限制为某个时间
【发布时间】:2014-04-25 21:29:40
【问题描述】:

每当运行从表中选择歌曲的脚本时,我都会增加正在播放的歌曲数量的一些值,但我只想在 5 小时内增加一次。因此,意味着用户将播放一首歌曲,并且仅第一次将其计为播放,然后等待 5 小时,然后才允许再次增加。

PHP

我只是不知道该怎么做。

$_SESSION['play_id'] = $_SERVER["REMOTE_ADDR"];
    $_SESSION['play_time'] = time();
    $then = $_SESSION['play_time'];
    $now  = time();
    $diff = $now->diff($then);
    if ($diff > 2 * 1000){
    $query = mysql_query("UPDATE music SET plays = plays + 1  WHERE sid = '$id'") or die (mysql_error());
    } else {
        echo 'not yet';
        }

谢谢。

【问题讨论】:

  • REMOTE_ADDR 不是识别用户的可靠方式。 IP 地址发生变化。
  • ...以及代理/NAT 共享地址后面的用户。 @SverriM.Olsen
  • 可以用用户账号代替IP地址吗?这是一种简单的方法,可确保您针对的是正确的用户,而不是具有相同 IP 地址的人。

标签: php mysql sql-update increment


【解决方案1】:
$ip = 0
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

安全问题 elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }

$_SESSION['play_id'] = $ip;
        $_SESSION['play_time'] = time();
        $then = $_SESSION['play_time'];
        $now  = time();
        $diff = $now->diff($then);
        if ($diff > 2 * 1000){
        $query = mysql_query("UPDATE music SET plays = plays + 1  WHERE sid = '$id'") or die (mysql_error());
        } else {
            echo 'not yet';
            }

【讨论】:

  • -1 HTTP_CLIENT_IPHTTP_X_FORWARDED_FOR 可以被欺骗,甚至可以用于 OP 的巨大 SQL 注入漏洞。 0' or '1'='1
  • 她在周末;p
  • @LozCherone 我会在周末检查你
【解决方案2】:

会话可能会在 5 小时前到期,而 cookie 会持续到您设置的时间。这里的一些想法是设置一个与正在播放的每个音乐的 id 对应的唯一 cookie。让内容为纪元,即日期('U')时间。当用户要播放音乐时,只需检查 cookie 是否存在,如果存在,则时差是否仍在一个小时之内。如果没有,请进行更新。就是这样

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2010-10-06
    • 2015-02-21
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2019-04-18
    • 2020-11-08
    相关资源
    最近更新 更多