2009-11-09 6 views

Respuesta

8

Un trabajo cron no podrá acceder a las cookies, ya que, por definición, no se invoca desde una solicitud del navegador web. Solo el navegador web almacena una cookie, que contiene la identificación de la sesión. Sin navegador web, sin cookies, sin sesiones.

Dicho esto, si haces conocer el ID de sesión de alguna manera, debe ser capaz de iniciar la sesión de forma manual mediante la alimentación de la identificación en session_id() antes de usar session_start().

+0

Y eso es solo si la sesión todavía existe. Un trabajo cron que se ejecuta, por ejemplo, una hora o días después, probablemente intente cargar una sesión que ya no existe. –

+0

Muchas gracias por su agradable respuesta. Me gusta. –

0

Existe un proyecto llamado pseudo cron que supongo que podría acceder a la sesión y/o las cookies. Pero no tendría sentido para mí.

+0

No realmente.Al ejecutar una solicitud real, "ve" las cookies de la persona que solicita la página en ese momento exacto, no las cookies de la persona cuyo trabajo cron está ejecutando. Se aplicaría la misma restricción @deceze cite aquí. Necesitaría saber de antemano el * session_id * y usarlo para comenzar una sesión. Lo cual hace que pseudo-cron no sea una buena opción a menos que no puedas usar cron. –

+0

Sí, tienes razón. Pero pensé que era relevante ya que la pregunta no hacía referencia a qué sesión particular acceder. Pero dado que desea acceder a una sesión con una identificación de sesión conocida, la respuesta de deceze sería precisa. –

2

Otra respuesta es que uno puede usar archivos de cookies de sesión con clientes web de línea de comandos. ejemplo:

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

1. obtener la página de inicio de sesión

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

2. pez fuera cualquier valores ocultos

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 agregar manualmente no oculta vars

FORMVARS = ".persistent = y & login = NOMBRE DE USUARIO & passwd = SE CRET "

4. enviar form-data a la diana

$ WGET -O login.html --post de datos = "$ {} HIDDENVARS & $ {} FORMVARS"" https: // inicio de sesión. yahoo.com/config/login? "

5. ganancia;)

0

A, del lado del servidor "cookie" basado en el tiempo para funcionar dentro de una tarea programada:

Uso de archivos() para leer el lado del servidor "cookie" - un archivo de texto.

Utilice fopen, fwrite, fclose para escribir la "cookie" del lado del servidor.

Uso implosionar si almacenar más de un valor de datos en su "cookie":

Código principal:

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

?> 

Un enfoque directamente de la mente de Heath Robinson - no muy elegante pero funciona si desea aplicar un comportamiento tipo cookie a un trabajo cron.

Cuestiones relacionadas