Pregunta

Tengo una de esas situaciones de "te juro que no toqué el servidor".Sinceramente, no toqué ninguno de los scripts php.El problema que tengo es que los datos de PHP no se guardan en diferentes páginas ni se actualizan.Sé que se está creando una nueva sesión correctamente porque puedo configurar una variable de sesión (p. ej.$_SESSION['foo'] = "foo" e imprimirlo nuevamente en la misma página.¡Pero cuando intento usar esa misma variable en otra página, no está configurada!¿Existe alguna función o información de PHP que pueda usar en mi servidor host para ver qué está pasando?

Aquí hay un script de ejemplo que no funciona en el servidor de mis hosts en este momento:

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
?>

La variable 'vistas' nunca se incrementa después de actualizar la página.Creo que esto es un problema de su lado, pero primero quería asegurarme de no ser un completo idiota.

Aquí está el phpinfo() para el servidor de mis hosts (PHP Versión 4.4.7):alt text

¿Fue útil?

Solución

Gracias por toda la información útil. Resulta que mi host cambió de servidor y comenzó a usar una ruta de guardado de sesión diferente a / var / php_sessions que ya no existía. Una solución hubiera sido declarar ini_set(' session.save_path','SOME WRITABLE PATH'); en todos mis archivos de script, pero eso habría sido una molestia. Hablé con el anfitrión y establecieron explícitamente la ruta de la sesión en una ruta real que existía. Espero que esto ayude a cualquiera que tenga problemas de ruta de sesión.

Otros consejos

Verifique para asegurarse de que no está mezclando https: // con http: //. Las variables de sesión no fluyen entre sesiones seguras e inseguras.

Tuve el mismo problema: lo que me sucedió es que el administrador de nuestro servidor cambió la sesión.cookie_secure boolean a On, lo que significa que las cookies solo se enviarán a través de una conexión segura. Como no se encontró la cookie, php estaba creando una nueva sesión cada vez, por lo que no se veían las variables de sesión.

Usar phpinfo() y comprobar el session.* ajustes.

Quizás la información se almacene en cookies y tu navegador no acepte cookies, algo así.

Verifique eso primero y regrese con los resultados.

También puedes hacer unprint_r($_SESSION); tener un volcado de esta variable y ver el contenido....

Respecto a tu phpinfo(), es el session.save_path uno válido?¿Su servidor web tiene acceso de escritura a este directorio?

Espero que esto ayude.

Tuve el siguiente problema

index.php

<?
    session_start();
    $_SESSION['a'] = 123;
    header('location:index2.php');
?>

index2.php

<?
  session_start();
  echo $_SESSION['a'];
?>

La variable $_SESSION['a'] no se configuró correctamente. Luego he cambiado el index.php por consiguiente

<?
    session_start();
    $_SESSION['a'] = 123;
    session_write_close();
    header('location:index2.php');
?>

No sé lo que esto significa internamente, solo me explico a mí mismo que el cambio de variable de sesión no fue lo suficientemente rápido :)

Verifique si el servidor web puede escribir la ruta de guardado de la sesión.

Asegúrate de tener las cookies activadas ... (me olvido cuando las apago para probar algo)

Use firefox con la extensión firebug para ver si la cookie se está configurando y transmitiendo de nuevo.

Y en una nota no relacionada, comience a mirar php5, porque php 4.4.9 es el último de la serie php4.

Verifique quiénes son el grupo y el propietario de la carpeta donde se ejecuta el script. Si la identificación del grupo o la identificación del usuario son incorrectas, por ejemplo, si se establece en root, hará que las sesiones no se guarden correctamente.

Verifique el valor de " views " cuando antes de incrementarlo. Si, por alguna extraña razón, se está configurando en una cadena, entonces cuando le agregas 1, siempre devolverá 1.

if (isset($_SESSION['views'])) {
    if (!is_numeric($_SESSION['views'])) {
        echo "CRAP!";
    }
    ++$_SESSION['views'];
} else {
    $_SESSION['views'] = 1;
}

Bueno, podemos eliminar el error de código porque probé el código en mi propio servidor (PHP 5).

Esto es lo que debe verificar:

  1. ¿Está llamando a session_unset () o session_destroy () en alguna parte? Estas funciones eliminarán los datos de la sesión inmediatamente. Si pongo esto al final de mi script, comienza a comportarse exactamente como usted describe.

  2. ¿Actúa igual en todos los navegadores? Si funciona en un navegador y no en otro, es posible que tenga un problema de configuración en el navegador que no funciona (es decir, desactivó las cookies y olvidó activarlas o está bloqueando las cookies por error).

  3. ¿Se puede escribir en la carpeta de sesión? No puede probar esto con is_writable (), por lo que deberá ir a la carpeta (desde phpinfo () se ve como / var / php_sessions) y asegurarse de que las sesiones se estén creando realmente.

Si configura una sesión en php5, intente leerla en una página php4, ¡podría no verse en el lugar correcto! Haga que las páginas tengan la misma versión de php o establezca session_path.

Pasé años buscando la respuesta para un problema similar. No fue un problema con el código o la configuración, ya que un código muy similar funcionó perfectamente en otro .php en el mismo servidor. Resultó que el problema fue causado por una gran cantidad de datos guardados en la sesión en esta página. En un lugar teníamos una línea como esta: $_SESSION['full_list'] = $full_list donde $full_list era una matriz de datos cargados desde la base de datos; cada fila era una matriz de aproximadamente 150 elementos. Cuando el código se escribió inicialmente hace un par de años, la base de datos solo contenía aproximadamente 1000 filas, por lo que <=> contenía aproximadamente 100 elementos, cada uno de los cuales era una matriz de aproximadamente 20 elementos. Con el tiempo, los 20 elementos se convirtieron en 150 y 1000 filas se convirtieron en 17000, por lo que el código almacenaba cerca de 64 meg de datos en la sesión. Aparentemente, con esta cantidad de datos almacenados, se negó a almacenar cualquier otra cosa. Una vez que cambiamos el código para tratar los datos localmente sin guardarlos en la sesión, todo funcionó perfectamente.

  

Sé que una solución que encontré (OSX con Apache 1 y simplemente cambié a PHP5) cuando tuve un problema similar fue que el hecho de desarmar 1 clave específica (es decir, desarmar ($ _ SESSION ['key']); ahorrar. Tan pronto como no desactivé más esa llave, la guardé. Nunca he visto esto otra vez, excepto en ese servidor en otro sitio, pero luego fue una variable diferente. Tampoco había nada especial.

Gracias por este Darryl. Esto me ayudó. Estaba eliminando una variable de sesión y, por alguna razón, impedía que la sesión se confirmara. ahora solo lo configuro como nulo (lo cual está bien para mi aplicación), y funciona.

Sé que una solución que encontré (OSX con Apache 1 y simplemente cambié a PHP5) cuando tuve un problema similar fue que el hecho de desarmar 1 clave específica (es decir, desarmar ($ _ SESSION ['key']); ahorrar. Tan pronto como no desactivé más esa llave, la guardé. Nunca he visto esto otra vez, excepto en ese servidor en otro sitio, pero luego fue una variable diferente. Tampoco había nada especial.

Aquí hay un problema común que no he visto abordado en los otros comentarios: ¿su host ejecuta algún tipo de caché? Si están almacenando automáticamente en caché los resultados de alguna manera, obtendría este tipo de comportamiento.

Solo quería agregar una pequeña nota de que esto también puede ocurrir si accidentalmente omite la instrucción session_start () en sus páginas.

Tenía la ruta de la cookie de sesión establecida en " // " en lugar de " / " ;. Firebug es asombroso. Espero que ayude a alguien.

Tuve este problema al usar páginas seguras de donde venía www.domain.com/auth.php que redirigen a domain.com/destpage.php. Eliminé el www del enlace auth.php y funcionó. Esto me arrojó porque todo funcionaba de otra manera; Sin embargo, la sesión no se configuró cuando llegué al destino.

Un problema común que a menudo se pasa por alto también es que NO debe haber otro código o espacio adicional antes del comando session_start ().

He tenido este problema antes, donde tenía una línea en blanco antes de session_start () que hacía que no funcionara correctamente.

Agregar mi solución:

Compruebe si accede al dominio correcto . Estaba usando www.mysite.com para comenzar la sesión e intenté recibirla de mysite.com (sin www).

He resuelto esto agregando una reescritura htaccess de todos los dominios a www para estar en el lado / sitio seguro.

Compruebe también si usa http o https.

Edite su php.ini.
Creo que el valor de session.gc_probability es 1, así que configúrelo en 0.

session.gc_probability=0

Compruebe si está utilizando session_write_close (); en cualquier lugar, estaba usando esto justo después de otra sesión y luego intentaba volver a escribir en la sesión y no estaba funcionando ... así que solo comente eso sh * t out

Otras cosas que tuve que hacer (tuve el mismo problema: no hubo retención de sesson después de la actualización de PHP a 5.4). Es posible que no los necesite, dependiendo de lo que contenga el php.ini de su servidor (consulte phpinfio ());

session.use_trans_sid=0 ; Do not add session id to URI (osc does this)
session.use_cookies=0;  ; ensure cookies are not used
session.use_only_cookies=0 ; ensure sessions are OK to use IMPORTANT
session.save_path=~/tmp/osc; ; Set to same as admin setting
session.auto_start = off; Tell PHP not to start sessions, osc code will do this

Básicamente, su php.ini no debe estar configurado para cookies, y los parámetros de la sesión deben ser consistentes con lo que quiere osc.

También es posible que deba cambiar algunos fragmentos de código de sesión en application_top.php, creando objetos donde no existan ninguno en las llamadas tep_session_is_registered (...) (p. ej., objeto de navegación), establezca $ HTTP_ variables en el nuevo $ _SERVER unos y algunas otras pruebas de isset para objetos vacíos (google for info). Terminé siendo capaz de usar los archivos sessions.php originales (incluye / classes e incluye / funciones) con un application_top.php ligeramente modificado para que las cosas vuelvan a funcionar. La configuración de php.ini fue el problema principal, pero esto, por supuesto, depende de lo que su compañía de servidores haya instalado como valores predeterminados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top