3

嗨,是否可以在 cronjob 中使用会话?

我使用的脚本是:

session_start();

if(empty($_SESSION['startwert'])){$startwert = 0;}
else {$startwert = $_SESSION['startwert'];}

if(empty($_SESSION['zielwert'])){$zielwert = 10000;}
else {$zielwert = $_SESSION['zielwert'];}


....


$_SESSION['startwert'] = $zielwert;
$_SESSION['zielwert'] = $zielwert + 10000;
echo "Startwert: ".$_SESSION['startwert']."<br>";
echo "Zielwert: ".$_SESSION['zielwert']."<br>";

但是 Cron 总是将“startwert”设置为 10000,将“zielwert”设置为 20000,并且不会增加值。


好的,现在我已经尝试过了。

/usr/bin/wget -O - http://mydomain.com/script.php

但是 cron 总是从 10000 和 20000 开始。有什么想法吗?

4

2 回答 2

5

如果您通过 cron 从 cron 调用 PHP 脚本wget,请使用该--save-cookies选项;如果通过curl,使用--cookie-jar。(如果您通过php -f [...]或类似方式调用 PHP 脚本,那么您首先需要通过wget或来调用它curl。)

例如:

wget --load-cookies /tmp/cron-session-cookies --save-cookies /tmp/cron-session-cookies --keep-session-cookies [...]

或者

curl -b --cookie-jar /tmp/cron-session-cookies [...]

wget默认情况下不保存会话 cookie,您希望它这样做,因此该--keep-session-cookies选项;curl默认情况下会保存它们,因此-b只需启用 cookie 并--cookie-jar告诉curl在哪里可以找到它们。在任何一种情况下,将 替换为[...]您已经传递给程序的任何选项和参数,并调整 cookie jar 文件的位置以适应口味。

于 2013-05-28T17:45:20.337 回答
2

并不真地。PHP 会话依赖于 cookie(忽略 trans-sid 模式),它实际上只存在于 HTTP 上下文中。cron 作业在 CLI 模式下运行,因此无需处理 http 层。

您可以通过在调用之前设置会话 ID 来强制 CLI 脚本使用特定会话文件,但不能session_start();保证特定 ID 在 cron 作业启动时确实存在,因为其他一些 PHP 实例的会话垃圾收集器可能已将其删除。

于 2013-05-28T17:20:46.777 回答