当我尝试计算IP点击数时,为什么会话无法正常工作?

DᴀʀᴛʜVᴀᴅᴇʀ

我正在尝试在PHP中创建一个计数器,该计数器将计算IP在设定时间范围内可以访问页面的次数,并且当该IP地址在该时间范围内到达下载计数器时,它将重新定向。我看到的推荐方法是在参考几个问答后通过一个会话进行此操作:

我还看了看:

我在Cookie和会话方面没有太多经验,因此我认为这是我的错误代码所在。如果您有什么建议比我正在做的更好,请提出建议。

编码:

$jsonFile       = 'foobar.json';
$theJSON        = file_get_contents($jsonFile);  
$jsonArray      = json_decode($theJSON, true);
$theIP          = "123.123.123"; // $_SERVER['REMOTE_ADDR']
$thisTime       = date("H:i");
$addMin         = 1; // set value for testing purposes
$addHour        = 0; // set value for testing purposes
$downloadHits   = 5; // set value for testing purposes
$timeLater      = date("H:i", strtotime($thisTime)+(($addMin*60)+($addHour*60*60)));


if (!empty($theIP) && !empty($jsonArray)) {
    foreach ($jsonArray as $value) {
        if (in_array($theIP, $value, true)) {
            echo "yes"; // header('Location: https://www.url/darthvader.com');
            exit();
        } else {
            if ($thisTime <= $timeLater) { // where my issue starts
                echo $timeLater; // for testing
                session_start();
                $counter = $_SESSION['promo_number'];
                $counter++;
                if ($counter == $downloadHits && file_exists($jsonFile)) {
                    $currentData = file_get_contents($jsonFile);  
                    $currentArray = json_decode($currentData, true); 
                    $theStuff = array(  
                        'ip'    => "123.123.123", // $_SERVER['REMOTE_ADDR']  
                        'date'  => date("H:i"),
                        'time'  => date("m.d.y")
                    );
                    $currentData[] = $theStuff;  
                    $finishData = json_encode($currentData);
                } else {
                    echo 'bar'; // for testing
                    session_unset();
                    session_destroy();
                }
            }
        }
    }
} else {
    echo '<span style="color:red; font-weight:bold;">empty file</span>';
}

我要做的是计算IP在设定时间内访问帖子的次数,如果达到该次数,则重定向IP。我确实知道该IP可以被欺骗,我对此并不担心,而且我宁愿此时使用数据库。那么,如何正确设置会话以计算点击数,如果IP命中了设置计数中的帖子,它将重定向IP?


编辑:

阅读并获得评论和答案的帮助后,我进行了编辑,希望可以解释我的尝试。经过进一步研究,我发现:

这导致我编写代码:

session_start();
$jsonFile           = 'foobar.json';
$jsonArray          = json_decode(file_get_contents($jsonFile), true);
$theIP              = $_SERVER['REMOTE_ADDR'];
$addMin             = 2; // set value for testing purposes
$addHour            = 0; // set value for testing purposes
$targetedHits       = 1; // set value for testing purposes
$timeLater          = time() + ($addMin*60) + ($addHour*60*60);
$_SESSION['expire'] = $timeLater;

if (!empty($theIP) && !empty($jsonArray)) {
    //look for the $theIP
    if (in_array($theIP,array_column($jsonArray,'ip'))) {
        echo 'IP found in json';
        exit;
    }
    // look at the time the session was set, add to counter or delete session
    if ($_SESSION['count'] = isset($_SESSION['count']) && time() < $_SESSION['expire'] ) {
        echo 'adding to count';
        $_SESSION['count'] + 1;
        // limit reached. Add IP to blacklist
        if ($_SESSION['count'] > $targetedHits) {
            echo 'session count reached max';
            $jsonArray[]=[
                'ip'    => $theIP,
                'date'  => date("H:i"),
                'time'  => date("m.d.y")
            ];
            // save changes
            file_put_contents($jsonFile,json_encode($jsonArray));
            session_destroy();
            exit;
        }       
    } elseif (time() > $_SESSION['expire']) {
        echo 'nuking session and counter';
        session_destroy();
    } else {
        echo 'setting count to 1';
        $_SESSION['count'] = 1;
    }
}
echo '<pre>';
var_dump($_SESSION);
echo '</pre>';

但可悲的是现在$_SESSION['count'] + 1;不再增加。

DᴀʀᴛʜVᴀᴅᴇʀ

在会话标签下花了一些时间后,找到了答案。这两个问题很有帮助:

这导致我编写代码:

session_start();
$jsonFile           = 'foobar.json';
$jsonArray          = json_decode(file_get_contents($jsonFile), true);
$theIP              = $_SERVER['REMOTE_ADDR'];
$addMin             = 1; // set value for testing purposes
$addHour            = 0; // set value for testing purposes
$targetedHits       = 5; // set value for testing purposes
$timeLater          = time() + ($addMin*60) + ($addHour*60*60);
if (empty($_SESSION['count'])) {
    $_SESSION['expire'] = $timeLater;
}
if (!empty($theIP) && !empty($jsonArray)) {
    // look for the $theIP
    if (in_array($theIP,array_column($jsonArray,'ip'))) {
        $_SESSION['count'] = 0;
        session_destroy();
        echo 'IP found in json';
        exit;
    }
    if (time() < $_SESSION['expire']) {
        echo 'below the time ';
        $_SESSION['count'] = isset($_SESSION['count'])? $_SESSION['count'] + 1 : 1;
        if ($_SESSION['count'] > $targetedHits) {
            echo 'session count reached max ';
            $jsonArray[] = [
                'ip'    => $theIP,
                'date'  => date("H:i"),
                'time'  => date("m.d.y")
            ];
            // save changes
            file_put_contents($jsonFile,json_encode($jsonArray));
            unset($_SESSION['count']);
            session_destroy();
            exit;
        }       
    } elseif (time() > $_SESSION['expire']) {
        echo 'nuking session and counter';
        $_SESSION['count'] = 0;
        unset($_SESSION['expire']);
    }   
}
echo '<pre>';
var_dump($_SESSION);
echo '</pre>';

我希望以上内容对下一个人有所帮助,因为我对会议真的一无所知,今天晚上让它开始工作真是一次冒险。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我尝试计算表中的行数时,为什么我的PHP无法正常工作?

来自分类Dev

当我在函数中使用if语句时,为什么我的javascript无法正常工作

来自分类Dev

为什么当我使用量角器书写文本时无法正常工作

来自分类Dev

当我在条件下使用 true 时,strpos 函数无法正常工作,为什么?

来自分类Dev

尝试解除绑定的点击,但是当我这样做时,我的ajax加载无法正常运行

来自分类Dev

为什么会话消息无法正常工作?

来自分类Dev

为什么会话消息无法正常工作?

来自分类Dev

为什么当我部署到AWS时,我的“使用google登录”(firebase + React)却无法正常工作

来自分类Dev

当我点击图像时,它无法从iPhone 5s正常工作

来自分类Dev

当我尝试连接数据库时,我的灯项目无法正常工作

来自分类Dev

我的ECS任务正在运行,但是当我尝试通过ALB或公共IP访问它时却无法正常工作

来自分类Dev

我的ECS任务正在运行,但是当我尝试通过ALB或公共IP访问它时却无法正常工作

来自分类Dev

当我尝试从 Controller 读取会话属性时,为什么会出现“未定义”错误

来自分类Dev

为什么当我尝试显示我的 ip usig Inet 时我的应用程序崩溃?

来自分类Dev

当我尝试删除图像PHP时unlink()无法正常工作

来自分类Dev

当我尝试从数据框中替换“ +”时,pandas.DataFrame.replace无法正常工作

来自分类Dev

当我尝试为Python 3.6安装Pygame时,Pip无法正常工作[已过时]

来自分类Dev

当我复制到计算机上时,无法获得正常工作的jsfiddle

来自分类Dev

当我在浏览器中加载页面时,我的</ form>标签消失了,这导致我的表单无法正常工作,为什么?

来自分类Dev

当我尝试计算平均绝对偏差时,为什么程序返回inf?

来自分类Dev

当我用string替换char时,代码可以正常工作。为什么呢?

来自分类Dev

当我尝试刷新错误消息时,为什么不延迟工作?

来自分类Dev

为什么我的__clone()无法正常工作?

来自分类Dev

为什么我的ViewBag无法正常工作?

来自分类Dev

为什么我的DATEPART无法正常工作?

来自分类Dev

为什么我的闹钟无法正常工作?

来自分类Dev

为什么我的ButtonClickListerner无法正常工作?

来自分类Dev

为什么我的.hover()无法正常工作?

来自分类Dev

为什么我的BXSlider无法正常工作?

Related 相关文章

  1. 1

    当我尝试计算表中的行数时,为什么我的PHP无法正常工作?

  2. 2

    当我在函数中使用if语句时,为什么我的javascript无法正常工作

  3. 3

    为什么当我使用量角器书写文本时无法正常工作

  4. 4

    当我在条件下使用 true 时,strpos 函数无法正常工作,为什么?

  5. 5

    尝试解除绑定的点击,但是当我这样做时,我的ajax加载无法正常运行

  6. 6

    为什么会话消息无法正常工作?

  7. 7

    为什么会话消息无法正常工作?

  8. 8

    为什么当我部署到AWS时,我的“使用google登录”(firebase + React)却无法正常工作

  9. 9

    当我点击图像时,它无法从iPhone 5s正常工作

  10. 10

    当我尝试连接数据库时,我的灯项目无法正常工作

  11. 11

    我的ECS任务正在运行,但是当我尝试通过ALB或公共IP访问它时却无法正常工作

  12. 12

    我的ECS任务正在运行,但是当我尝试通过ALB或公共IP访问它时却无法正常工作

  13. 13

    当我尝试从 Controller 读取会话属性时,为什么会出现“未定义”错误

  14. 14

    为什么当我尝试显示我的 ip usig Inet 时我的应用程序崩溃?

  15. 15

    当我尝试删除图像PHP时unlink()无法正常工作

  16. 16

    当我尝试从数据框中替换“ +”时,pandas.DataFrame.replace无法正常工作

  17. 17

    当我尝试为Python 3.6安装Pygame时,Pip无法正常工作[已过时]

  18. 18

    当我复制到计算机上时,无法获得正常工作的jsfiddle

  19. 19

    当我在浏览器中加载页面时,我的</ form>标签消失了,这导致我的表单无法正常工作,为什么?

  20. 20

    当我尝试计算平均绝对偏差时,为什么程序返回inf?

  21. 21

    当我用string替换char时,代码可以正常工作。为什么呢?

  22. 22

    当我尝试刷新错误消息时,为什么不延迟工作?

  23. 23

    为什么我的__clone()无法正常工作?

  24. 24

    为什么我的ViewBag无法正常工作?

  25. 25

    为什么我的DATEPART无法正常工作?

  26. 26

    为什么我的闹钟无法正常工作?

  27. 27

    为什么我的ButtonClickListerner无法正常工作?

  28. 28

    为什么我的.hover()无法正常工作?

  29. 29

    为什么我的BXSlider无法正常工作?

热门标签

归档