usuario520300
¿Alguien puede decirme por qué las variables de sesión no pasan entre páginas? Estuvieron trabajando hasta hace 2 días. Ahora no lo es? Hay un sistema de terceros que inicia la sesión de los 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 inicia sesión en un usuario y pasa su identificación y un token generado en su extremo y lo devuelve a mi sitio con la identificación y el token en la URL.
Si las sesiones no están configuradas, intento tomar la identificación y el token de la URL y configurar las sesiones. (en funcionamiento) Luego genero mi propio token para validarlo con el token pasado desde el sistema de terceros (en funcionamiento) cuando voy a hacer clic en otra página, las sesiones que configuré no están vacías (????)
Aquí está mi código:
<?php
session_start();
// FUNCTION TO PASS THE URL THE USER IS ON SO THEY COME
// BACk TO THIS PAGE AFTER THE LOG IN. IF APPLICABLE
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
// DESTROY SESSION INFO IF TIMED OUT
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 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());
}
?>
ok, esto está jodido. Creo que tiene que ser un problema en la configuración de PHP de los proveedores de alojamiento porque creé dos páginas. uno llamado info con este código:
<?
session_start();
$_SESSION['ID'] = "112233";
$_SESSION['token'] = "mytoken";
print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="https://stackoverflow.com/questions/6200612/info2.php">info 2</a>
y uno llamado info2 con este código:
<?
session_start();
print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="https://stackoverflow.com/questions/6200612/info.php">info</a>
info creada e impresa la sesión ok. cuando hago clic en el enlace para ir a info2, las sesiones no se imprimen. ¿Es este un problema de configuración de alojamiento?
Rudi Visser
Como ya se mencionó, asegúrese de llamar session_start()
en cada página.
Además, ¿los scripts están en diferentes subdominios? Si lo son, debe establecer el valor INI session.cookie_domain
a .DOMAIN.EXT
.
Para depurar aún más toda esta situación, realice una simple observación de cookies. Ve si PHPSESSID
está presente como una cookie en ambas solicitudes de página, si no es así, entonces este es su problema. No puede almacenar cookies entre dominios a menos que las 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, verifique el valor de session.cookie_domain
como esto:
echo ini_get('session.cookie_domain');
¿Eso está configurado para algo? De forma predeterminada, debe estar en blanco, si está configurado, especialmente no para su dominio, este es el problema.
También puede intentar depurar el valor de la cookie de PHPSESSID
como sugerí primero.
-
ver mi adición a la publicación original
– usuario520300
1 de junio de 2011 a las 12:34
-
No he probado esto todavía, pero lo haré. Pregunta… si por defecto echo ini_get(‘session.cookie_domain’); no está en blanco y no es mi dominio, ¿qué hago?
– usuario520300
1 de junio de 2011 a las 13:54
-
2 Opciones, 1: Contacta a tu proveedor de hosting porque está mal, 2: Puedes usar
ini_set('session.cookie_domain', '.your.domain');
oini_set('session.cookie_domain', '');
antes desession_start()
.–Rudi Visser
1 de junio de 2011 a las 14:02
-
As already mentioned, ensure you're calling session_start() on each page.
, siempre la respuesta simple que me elude. ¡Saludos, Rudi, puntos de felicitaciones para ti!– Descarado
20 de diciembre de 2016 a las 11:01
-
Revisé todo esto y todavía no puedo hacer que la sesión persista. Veo PHPSESSID establecido, pero mi
$_SESSION
las variables no se llevan a la carga de la página siguiente.– Nicolás Rolando
15 de enero de 2019 a las 3:39
Lista de Verificación
1. Asegúrese de haber utilizado session_start(); en la página siguiente.
2. ¿Está utilizando el archivo .htaccess?
si es así, elimine el archivo .htaccess y verifique lo mismo.
en algún momento, las reglas de reescritura causan problemas de sesión…
3. Si la sesión funciona bien y solo tiene problemas con el token, verifique que el token enviado en la url esté codificado en url.
-
He comprobado la adición. este problema puede deberse a la configuración del servidor. consulte con su proveedor de alojamiento.
– Jagadeesan
6 de junio de 2011 a las 6:12
-
De hecho, tener el archivo .htaccess estaba causando que mi session_start() falle y devuelva falso. ¡Vaya, eso es realmente sutil e insidioso! Thx funciona ahora.
– IVSoftware
24 de junio de 2020 a las 16:11
Hemant Jadhav
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 para “WWW.example.com”, por lo que si un enlace va a www.example.com, no tendrá esa sesión.
puede usar htaccess para establecer siempre la URL en “WWW.example.com” use el siguiente código para ello
Motor de reescritura encendido
RewriteCond %{HTTP_HOST} ^hemantjadhav.com$ [NC]
Regla de reescritura ^(.*)$ http://www.hemantjadhav.com/$1 [L,R=301]
(reemplace hemantjadhav con su nombre de dominio)
-
¡Eso fue todo, revisa tus URL! Me estaba tirando de los pelos y no me di cuenta de que estaba almacenando desde dos sitios diferentes. Uno con www y otro sin.
– Aprendiz33
22 de abril de 2021 a las 16:43
grisob
Verifique el tamaño del archivo de sesión: (código tomado de esta publicación)
$sessionfile = ini_get('session.save_path') . "https://stackoverflow.com/" . '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 disponible en el disco de su servidor. Ese fue el problema que tuve.
Compruebe el espacio en disco con df -h
en un servidor linux.
La respuesta a esto es que fue un error de configuración del alojamiento. La empresa de alojamiento cambió algo y ha funcionado desde entonces.
-
Sería bueno saber qué era.
– Bernardo
14 de enero de 2019 a las 8:15
-
en mi caso, también era un problema de alojamiento, era un archivo htaccess que modificaron y agregaron algunas reglas nuevas para versiones específicas de php, parece que htaccess estaba creando confusión entre las páginas y las versiones de php instaladas en el servidor
– Vikas Kandari
21 oct 2020 a las 7:30
D.Sari
En mi caso, la solución fue tener diferentes nombres de parámetros en $_GET y $_SESSION.
$_SESSION["businessid"] = $_GET["businessid"]; // Leads to problems with session.
$_SESSION["business_id"] = $_GET["businessid"]; //Works perfectly.
Suena raro pero esa es mi experiencia.
-
Sería bueno saber qué era.
– Bernardo
14 de enero de 2019 a las 8:15
-
en mi caso, también era un problema de alojamiento, era un archivo htaccess que modificaron y agregaron algunas reglas nuevas para versiones específicas de php, parece que htaccess estaba creando confusión entre las páginas y las versiones de php instaladas en el servidor
– Vikas Kandari
21 oct 2020 a las 7:30
elhose
La única respuesta para este problema es usar session_start();
en la parte superior de cada página. Funcionará bien. De lo contrario, es posible que deba ponerse en contacto con su proveedor de alojamiento sobre este problema.
-
Al responder una pregunta de hace ocho años con nueve respuestas existentes, es útil explicar qué aspecto nuevo de la pregunta aborda su respuesta. También tenga en cuenta si la respuesta habría funcionado cuando se hizo la pregunta, o si depende de algo que ha cambiado durante esos ocho años.
-Jason Aller
12 sep 2019 a las 19:16
-
session_start () se establece en los ejemplos de código de OP. ¿Has leído antes de responder?
– Craig B.
24 de agosto a las 2:28
Tengo exactamente el mismo problema… excepto que mis cosas están en localhost, usando PHP con IIS
– Tomas An
20 de octubre de 2015 a las 1:20