2009-11-09 124 views
9

我是新来的cron工作,我已经做了很多关于这个话题的搜索,但我无法完全理解它。 cron作业可以访问cookie或会话变量吗?php cron作业可以访问会话变量/ cookies吗?

谢谢!

+0

你应该真的指定了这种访问需要的用例。 – 2009-11-09 07:35:25

回答

8

cron作业将无法访问cookie,因为根据定义,它不会从web浏览器请求中调用。只有Web浏览器存储一个包含会话ID的cookie。没有网页浏览器,没有cookie,没有会话。

说了这么多,如果你知道会话ID不知何故,你应该能够通过喂食ID手动启动会话为session_id()使用session_start()之前。

+0

只有当会话仍然存在时。运行一个cron作业,比如说,几小时或几天后,可能会尝试加载不再存在的会话。 – 2009-11-09 07:08:19

+0

非常感谢你的答案。我喜欢。 – 2017-12-18 16:12:39

0

有一个名为pseudo cron的项目,我想可以访问会话和/或cookie。但这对我来说没有意义。

+0

不是。通过根据实际请求运行,它可以从请求该页面的人员那个时刻“看到”cookie,而不是来自您正在运行cron-job的人员的cookie。 这里也适用同样的限制@deceze cite。您需要事先知道* session_id *并使用它开始会话。除非你不能使用cron,否则他们使伪cron不是一个好选择。 – 2009-11-09 07:46:30

+0

是的,你是对的。但是我认为这是相关的,因为这个问题没有提到哪个特定的会话可以访问。但是,如果你想访问一个已知会话ID的会话,来自deceze的答案将是准确的。 – 2009-11-09 08:27:32

2

另一个答案是,可以使用命令行Web客户端的会话cookie文件。 例如:

C=~/tmp/x 
WGET="wget --keep-session-cookies --load-cookies=$C --save-cookies=$C" 

1.获得登录页面

$WGET -O index.html "http://mail.yahoo.com" 

2.捞出任何隐藏值

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' '&'` 

3手动添加非隐藏瓦尔

FORMVARS = “.persistent = y & login = USERNAME & passwd = SE CRET “

4.交形状数据发送到目标

$ WGET -O的login.html --post数据= ”$ {HIDDENVARS} & $ {FORMVARS}“” https://开头登录。 yahoo.com/config/login?”

5.利润;)

0

基于时间的,服务器端的 “cookie” 到cron作业中运行:

使用file()来读取服务器端的 “曲奇” - 一个文本文件。

使用fopen,fwrite,fclose写入服务器端的“cookie”。

使用内爆,如果在你的“饼干”中存储多于datavalue:

主要代码:

<?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'; 

?> 

直接从荒地鲁宾逊的心灵的一种方法 - 不是很优雅,但它的工作原理如果您想将类似cookie的行为应用于cron作业。