在Cronjob中使用Session(Crontab)

时间:2013-05-28 17:17:33

标签: php session cron crontab

嗨,是否可以在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开始。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

例如:

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文件的位置以便品尝。

答案 1 :(得分:1)

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

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

相关问题