2009-11-09 77 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作業。