0

你好我已经为ubuntu实现了一个cron系统;由于我需要每 30 秒运行一次,我不得不结合 PHP 进行一些调整以达到必要的范围。

问题是在实施之前一切正常;实施后我注意到用户的 php 会话在 1 小时后被随机删除。当它应该持续长达8小时......

执行的 CRON 文件:

#!/bin/sh
cd /opt/lampp/htdocs/control/cronos/
php cron.php

CRON PHP 处理程序:

<?php
$j = 0;
while ($j <= 1) {
    $url    = 'http://127.0.0.1/index.php';
    $fields = array(
        'idprocess' => 'p-cronjobs',
        'idform'    => 'p-cronjobs',
    );
    $postvars         = http_build_query($fields);
    $COOKIE_FILE_PATH = "/tmp/cookiescron.txt";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
    curl_setopt($ch, CURLOPT_TIMEOUT, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
    curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));
    curl_exec($ch);
    curl_close($ch);
    $j++;
    sleep(25);
}
?>

用于 PHP 管理器 Cron 执行的系统处理程序:

switch ($idform) {
    case "p-cronjobs":
            $stmtpre      = "SELECT TListIdCJ FROM ListCronJobs WHERE TListCJST=1 AND TListCJSTR=0;";
            $data         = $this->DBMANAGER->BDquery($stmtpre, DB_N_LIST);
            $result_exist = $data->num_rows;

            if ($result_exist != 0) {
                while ($row = mysqli_fetch_assoc($data)) {

                    $fields = array(
                        'idprocess' => $row['TListIdCJ'],
                        'idform'    => 'p-runcronjobs',
                    );
                    $postvars = http_build_query($fields);
                    $ch       = curl_init();
                    curl_setopt($ch, CURLOPT_URL, LOCALURL);
                    curl_setopt($ch, CURLOPT_POST, count($fields));
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
                    curl_setopt($ch, CURLOPT_TIMEOUT, 2);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
                    curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
                    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
                    curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 10);
                    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
                    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));
                    curl_exec($ch);
                    curl_close($ch);
                }
            }
            break;
}

如何避免 cron 和使用 curl 发出的多个请求的会话问题?

4

1 回答 1

0

该问题可能与以下用途有关:

session_set_cookie_params(time() + 3600);
or
setcookie('name', 'id', time()+3600, "/");

PHP垃圾收集澄清

在读取数据后需要解决和使用它,Session如果您有权访问,php.ini您可以将 Expiration 设置为 0 以防止垃圾收集器终止会话。

于 2018-06-06T17:32:45.927 回答