嗨,是否可以在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开始。有什么想法吗?
答案 0 :(得分:4)
如果您通过wget
从cron调用PHP脚本,请使用--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文件的位置以便品尝。
答案 1 :(得分:1)
不是真的。 PHP会话依赖于cookie(忽略trans-sid模式),它实际上只存在于HTTP上下文中。 cron作业正在CLI模式下运行,因此没有要处理的http层。
您 CAN 强制CLI脚本通过在调用session_start();
之前设置会话ID来使用特定会话文件,但是当cron作业启动时,无法保证特定ID实际存在,因为其他一些PHP实例的会话垃圾收集器可能已将其删除。