我是cron工作的新手,我已经在这个主题上做了很多搜索,但我无法完全理解它。 cron job可以访问cookie或会话变量吗?
谢谢!
答案 0 :(得分:9)
cron作业将无法访问cookie,因为根据定义,它不会从Web浏览器请求中调用。只有Web浏览器存储包含会话ID的cookie。没有网络浏览器,没有cookie,没有会话。
话虽如此,如果您 以某种方式知道会话ID,您应该能够通过在使用session_start()
之前将ID提交到session_id()
来手动启动会话。
答案 1 :(得分:2)
另一个答案是,可以将命令行Web客户端使用会话cookie文件。 例如:
C=~/tmp/x
WGET="wget --keep-session-cookies --load-cookies=$C --save-cookies=$C"
$WGET -O index.html "http://mail.yahoo.com"
HIDDENVARS=`cat index.html | tr '\r\n\t' ' ' | tr -s ' ' | sed "s|> *<|>~<|g" | tr '~' '\n' | \
grep -i "<input .*hidden" | sed "s|.*name=\"\([^\"]*\)\".*value=\"\([^\"]*\)\".*$|\1=\2|g" | tr '\n' '&'`
FORMVARS = “持久= Y&安培;登录名= USERNAME&安培;的passwd = SECRET”
$ WGET -O login.html --post-data =“$ {HIDDENVARS}&amp; $ {FORMVARS}”“”https://login.yahoo.com/config/login?“
答案 2 :(得分:0)
我认为有一个名为pseudo cron的项目可以访问会话和/或cookie。但这对我没有意义。
答案 3 :(得分:0)
基于时间的服务器端&#34; cookie&#34;在cron工作中运行:
使用file()来读取服务器端&#34; cookie&#34; - 文本文件。
使用fopen,fwrite,fclose编写服务器端&#34; cookie&#34;。
如果在&#34; cookie&#34;中存储多个数据值,请使用implode:
主要代码:
<?php
$username = 'whatever';
$usercookie = 'http://yourdomainname.com/cookiebank/'.$username.'cookie.txt';
$oldtime = file($usercookie);
if(is_array($oldtime)) {
$cookievalue = implode(" ",$oldtime);
}
else {
$cookievalue = $oldtime;
}
// $cookievalue can then be used as you wish...
$newtime = date("M j G:i:s");
$newtime = strtotime($newtime)*1000; // current time in msec
$myfile = fopen($usercookie, "w") or die("Unable to open file!");
fwrite($myfile, $newtime);
fclose($myfile);
echo 'done';
?>
一种直接来自Heath Robinson头脑的方法 - 不是很优雅,但是如果你想将类似cookie的行为应用于cron工作,它就会起作用。