validar sesiones seguras pasar paginas manejo entre ejemplo control php session

pasar - sesiones seguras php



Datos de la sesiĆ³n PHP no se guardan (22)

Tengo una de esas situaciones de "Juro que no toqué el servidor". Honestamente, no toqué ninguno de los scripts php. El problema que estoy teniendo es que los datos php no se guardan en diferentes páginas o actualizaciones de página. Sé que se está creando una nueva sesión correctamente porque puedo establecer una variable de sesión (por ejemplo, $ _SESSION [''foo''] = "foo" e imprimirla de nuevo en la misma página, pero cuando intento usar esa misma variable) en otra página no está configurado. ¿Hay alguna función php o información que pueda usar en mi servidor de hosts para ver qué está pasando?

Aquí hay un script de ejemplo que no funciona en el servidor de mi servidor 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 hacer una actualización de página. Estoy pensando que este es un problema de su parte, pero quería asegurarme de no ser un idiota completo primero.

Aquí está el phpinfo () para el servidor de mi servidor (PHP Version 4.4.7):


Sé que una solución que encontré (OSX con Apache 1 y simplemente cambié a PHP5) cuando tuve un problema similar fue que la desconexión de 1 clave específica (es decir, unset ($ _ SESSION [''key'']);) estaba causando que no se guarde. Tan pronto como no desarmé esa clave, ella guardó. Nunca he visto esto otra vez, excepto en ese servidor en otro sitio, pero luego era una variable diferente. Tampoco hubo nada especial.

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


Agregar mi solución:

Verifica si tienes acceso al dominio correcto . Estaba usando www.mysite.com para comenzar la sesión y traté de recibirlo de mysite.com (sin www ).

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

También verifica si usas http o https.


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ás llamando a session_unset () o session_destroy () en cualquier lugar? Estas funciones eliminarán los datos de la sesión inmediatamente. Si pongo estos 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, que desactivó las cookies y olvidó activarlas, o está bloqueando las cookies por error).

  3. ¿La carpeta de sesión puede escribirse? 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 realmente se están creando.


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


Compruebe quién es 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, establecer como raíz, las sesiones no se guardarán correctamente.


Compruebe si está utilizando session_write_close (); en cualquier lugar, estaba usando esto justo después de otra sesión y luego intenté escribir en la sesión nuevamente y no estaba funcionando ... así que simplemente comenten que sh * t out


Edita tu php.ini.
Creo que el valor de session.gc_probability es 1, así que configúralo a 0.

session.gc_probability=0


Este es un problema común que no he visto abordado en los otros comentarios: ¿está ejecutando su host un caché de algún tipo? Si almacenan los resultados de la memoria caché automáticamente, obtendrías este tipo de comportamiento.


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


Otras cosas que tuve que hacer (tuve el mismo problema: no retención de sesson después de la actualización de PHP a 5.4). Muchos no los necesitan, dependiendo de lo que contenga php.ini de su servidor (marque 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 debe establecerse en no cookies, y los parámetros de sesión deben ser coherentes con lo que quiere osc.

También es posible que necesite cambiar algunos fragmentos de código de sesión en application_top.php, crear objetos donde no exista ninguno en las llamadas tep_session_is_registered (...) (p. Ej., Objeto de navegación), establecer $ HTTP_ variables en los $ _SERVER más nuevos y un algunas otras pruebas isset para objetos vacíos (google para información). Terminé siendo capaz de utilizar los archivos originales sessions.php (incluye / classes e includes / functions) con un application_top.php ligeramente modificado para que todo vuelva a funcionar. La configuración de php.ini fue el principal problema, pero esto, por supuesto, depende de lo que tu compañía de servidor haya instalado como predeterminada.


Pasé siglos 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 funcionaba perfectamente en otro .php en el mismo servidor. Resultó que el problema fue causado por una gran cantidad de datos que se guardan 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 de la base de datos; cada fila era una matriz de alrededor de 150 elementos. Cuando el código se escribió inicialmente hace un par de años, el DB solo contenía alrededor de 1000 filas, por lo que $full_list contenía alrededor de 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 convertidas en 17000, por lo que el código almacenaba cerca de 64 megas de datos en la sesión. Aparentemente, con esta cantidad de datos almacenados, se negó a almacenar nada más. Una vez que cambiamos el código para tratar los datos localmente sin guardarlo 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 la desconexión de 1 clave específica (es decir, unset ($ _ SESSION [''key'']);) estaba causando que no se guarde. Tan pronto como no desarmé esa clave, ella guardó. Nunca he visto esto otra vez, excepto en ese servidor en otro sitio, pero luego era una variable diferente. Tampoco hubo nada especial.


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


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


Tenía 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. Entonces he cambiado el index.php

<? 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 la variable de sesión no fue lo suficientemente rápido :)


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


Tuve el mismo problema: lo que me sucedió es que nuestro administrador del servidor cambió el session.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 encontraba la cookie, php estaba creando una nueva sesión cada vez, por lo que las variables de sesión no se veían.


Tuve este problema al usar páginas seguras en las que venía de www.domain.com/auth.php que me redirigía a domain.com/destpage.php. Quité el www del enlace auth.php y funcionó. Esto me tiró porque todo funcionó de otra manera; la sesión no se estableció cuando llegué al destino.


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

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


Use phpinfo() y compruebe la configuración de la session.* .

Tal vez la información se almacena en las cookies y su navegador no acepta cookies, algo así.

Verifique eso primero y regrese con los resultados.

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

En cuanto a su phpinfo() , ¿la phpinfo() es válida? ¿Su servidor web tiene acceso de escritura a este directorio?

Espero que esto ayude.


Verifique el valor de "vistas" cuando antes de incrementarlo. Si, por alguna extraña razón, se establece en una cadena, cuando agregas 1 a ella, siempre devolverá 1.

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


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

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

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

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