Las variables de sesión no persisten entre cargas de página

¿Puede alguien decirme por qué los valores de sesión no pasan entre páginas? Estuvieron trabajando hasta hace 2 días. Ahora no es? Hay un sistema de terceros que registra usuarios en función del sistema de terceros. Dirijo a los usuarios a la página de inicio de sesión con la URL de retorno. El sistema de terceros registra a un usuario y transfiere su ID y un token generado en su extremo y los devuelve a mi sitio con el ID y el token en la url.

Si las sesiones no están establecidas, bash capturar el ID y el token de la url y configurar las sesiones. (trabajando) Luego genero mi propio token para validar contra el token pasado desde el sistema de terceros (en funcionamiento) cuando voy a hacer clic en otra página las sesiones que configuro no están vacías (????)

Aquí está mi código:

 1800)) { session_destroy(); // destroy session data in storage session_unset(); // unset $_SESSION variable for the runtime } // SET THE SESSIONS WITH INFO PASSED FROM // LOGIN PAGE SENT AS A GET if(isset($_SESSION['ID']) && isset($_SESSION['token'])) {}else{ $_SESSION['ID'] = $_GET['ID']; $_SESSION['token'] = $_GET['token']; } // GENERATE MY TOKEN TO MATCH THE LOGIN SYSTEM TOKEN $userIP = $_SERVER['REMOTE_ADDR']; $secretkey = 'A Unique Key For The Logged In User Matching the Login System Passed From mydomain.com/login.php'; $algorithm = 'md5'; $mm = date('m'); $dd = date('d'); $mmdd = $mm.$dd; $mytoken = strtoupper(hash($algorithm, $secretkey.$_SESSION['ID'].$userIP.$mmdd)); $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp // THIS IS WHERE THINGS ARE GOING WRONG // SESSION token IS NO LONG SET AFTER I Go To another page // and my token isnt the same any more either because session ID // is no longer set??? if($_SESSION['token']==$mytoken){}else{ header("location: https://mydomain.com/login.php?returnURL=".curPageURL()); } ?> 

vale, esto está en mal estado. Tiene que ser un problema en la configuración PHP de los proveedores de alojamiento, creo, porque creé dos páginas. una llamada información con este código:

  info 2 

y uno llamado info2 con este código:

  info 

información creada e impresa la sesión está bien. cuando hago clic en el enlace para ir a info2 las sesiones no se imprimen. ¿Es este un problema de configuración de alojamiento?

Como ya se mencionó, asegúrese de estar llamando a session_start() en cada página.

Además, ¿los scripts están en diferentes subdominios? Si es así, debe establecer el valor de INI .DOMAIN.EXT en .DOMAIN.EXT .

Para depurar aún más toda esta situación, haga una simple observación de cookies. Vea si PHPSESSID está presente como una cookie en ambas solicitudes de página, si no es así, este es su problema. No puede almacenar cookies entre dominios a menos que los reconstruya.


En respuesta a su actualización, intente hacer esto debajo de su llamada a session_start() :

 echo session_id(); 

Confirme que es el mismo en ambas páginas. Si no, verifica el valor de session.cookie_domain así:

 echo ini_get('session.cookie_domain'); 

¿Eso está configurado para algo? Por defecto debería estar en blanco, si está configurado, especialmente no para su dominio, este es el problema.

También puede intentar depurar el valor de cookie de PHPSESSID como sugerí por primera vez.

Lista de verificación
1. Asegúrese de haber utilizado session_start (); en la próxima página.

2. ¿Estás usando el archivo .htaccess?
si es así, elimine el archivo .htaccess y verifique lo mismo.
algunas reglas de reescritura de tiempo causan problemas de sesión …

3. Si la sesión funciona bien y tiene problemas solo con token, entonces verifique que el token enviado en url esté url_encoded.

no es el problema del servidor de alojamiento …

revisa tus URL

si un usuario inicia sesión en “example.com”, la sesión se almacenará para “example.com” y no como “WWW.example.com”, de modo que si un enlace va a http://www.example.com, no tendrá esa sesión.

puede usar htaccess para establecer siempre la url en “WWW.example.com”, use el código a continuación para ello

RewriteEngine en

RewriteCond% {HTTP_HOST} ^ hemantjadhav.com $ [NC]

RewriteRule ^ (. *) $ http://www.hemantjadhav.com/ $ 1 [L, R = 301]

(reemplace hemantjadhav con su nombre de dominio)

La respuesta a esto es que fue un error de configuración de alojamiento. La empresa de alojamiento cambió algo y ha funcionado desde entonces.

Asegúrese de que ambas páginas estén en el mismo dominio. Incluso http://www.site.com es diferente de site.com

Verifique el tamaño del archivo de la sesión: (código tomado de esta publicación )

 $sessionfile = ini_get('session.save_path') . '/' . 'sess_'.session_id(); echo 'session file: ', $sessionfile, ' '; echo 'size: ', filesize($sessionfile), "\n"; 

Si su archivo de sesión tiene un tamaño cero, asegúrese de que aún haya espacio en disco disponible en su servidor. Ese fue el problema que tuve.

Compruebe el espacio en disco con df -h en un servidor Linux.

No llamó a session_write_close ()