2009-11-09 9 views

Odpowiedz

8

crona nie będzie w stanie uzyskać dostęp do plików cookie, ponieważ z definicji nie jest wywoływana z prośbą przeglądarki internetowej. Tylko przeglądarka internetowa przechowuje plik cookie, który zawiera identyfikator sesji. Bez przeglądarki internetowej, bez plików cookie, bez sesji.

Mimo, że jeśli zrobić znać identyfikator sesji w jakiś sposób, powinieneś być w stanie ręcznie uruchomić sesję karmienia identyfikator do session_id() przed użyciem session_start().

+0

A to tylko wtedy, gdy sesja nadal istnieje. Zadanie cron uruchomione, powiedzmy, godzinę lub kilka dni później prawdopodobnie spróbuje wczytać sesję, która już nie istnieje. –

+0

Bardzo dziękuję za miłą odpowiedź. Lubię to. –

0

Jest projekt o nazwie pseudo cron że przypuszczam, będzie mógł uzyskać dostęp do sesji i/lub ciasteczka. Ale nie miałoby to dla mnie żadnego sensu.

+0

Niezupełnie.Uruchamiając się z rzeczywistego żądania, "widzi" pliki cookie od osoby żądającej strony w tym momencie, a nie pliki cookie od osoby, której praca cron jest uruchomiona. To samo ograniczenie @deceze cite miałoby zastosowanie tutaj. Musisz wcześniej wiedzieć, * session_id * i użyć go do rozpoczęcia sesji. Co sprawia, że ​​pseudo-cron nie jest dobrą opcją, chyba że nie możesz użyć crona. –

+0

Tak, masz rację. Pomyślałem jednak, że jest to istotne, ponieważ pytanie nie zawierało odniesienia do konkretnej sesji, do której można się dostać. Ale biorąc pod uwagę, że chcesz uzyskać dostęp do sesji ze znanym identyfikatorem sesji, odpowiedź od deceze byłaby dokładna. –

2

Kolejną odpowiedzią jest to, że można używać plików cookie sesji z klientami sieciowymi z wiersza poleceń. przykład:

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

1. dostać się na stronę logowania

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

2. ryba wyjęta żadnych ukrytych wartości

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 ręcznie dodać zakaz ukryty vars

FORMVARS = ".persistent = y & login = USERNAME & passwd = SE Cret "

4. pocztowe form-data do celu

$ WGET -O login.html --post-data = "$ {HIDDENVARS} & $ {FORMVARS}"" https: // logowania. yahoo.com/config/login? "

5. zysk;)

0

Czas opartych server-side "cookies", aby uruchomić w cron:

Wykorzystanie plików() w celu zapoznania się z po stronie serwera "cookie" - plik tekstowy.

Użyj fopen, fwrite, fclose, aby napisać "cookie" po stronie serwera.

Zastosowanie implozji jeśli przechowywania więcej niż jednego danych typu w swojej „cookie”:

Kod Główny:

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

?> 

Podejście prosto z umysłu Heath Robinson - niezbyt eleganckie, ale działa jeśli chcesz zastosować zachowanie podobne do ciasteczek do zadania cron.

Powiązane problemy