2012-04-23 8 views
7

Recientemente he hecho tres aplicaciones de pastel y las tres comparten este problema. La configuración es en su mayoría de stock y yo uso esto como las opciones de sesión.CakePHP sigue cerrándome

Configure::write('Session', array(
    'defaults' => 'php', 
    'cookie' => 'test' 
)); 

Después de mucho googlear todo el mundo sólo sugiere que el nivel de seguridad es demasiado alto, pero nunca he cambiado este valor, es:

Configure::write('Security.level', 'medium'); 

Editar: También he intentado con baja seguridad y sin cambio

Solo estoy usando autenticación básica para verificar si el usuario está conectado o no.

Después de iniciar sesión, la cookie expira tres horas después y la fecha de caducidad no se actualiza hasta que vuelva a iniciar sesión, ¿es esto normal?

No puedo replicar el problema en absoluto, a veces me conectaré y el siguiente clic me cerrará la sesión nuevamente y otras veces durará un tiempo.

Estoy usando Chrome en Windows 7 y no hay AJAX en el sitio web.

¿Alguna idea? Gracias.

+0

ocurre con mee también ... Intente cambiar 'Configure :: write ('Security.level', 'bajo');' !! – Rikesh

+0

No es necesario que se salga del control y comience a demandar navegadores ahora;) – jeremyharris

+0

@Jleagle ¿dónde establece el tiempo de las cookies para el usuario registrado y cómo? publique el código, por favor .. – thecodeparadox

Respuesta

5

¿Estás utilizando Ajax. ¿El problema solo está sucediendo en IE?

IE utiliza una cadena de agente de navegador diferente para las llamadas Ajax al navegador. Para mayor seguridad, Cake revisa el agente del navegador y, en el caso de IE, piensa que otro navegador está intentando secuestrar la sesión ya que el agente es diferente.

Puede deshabilitar esta comprobación con:

Configure::write('Session.checkAgent', false); 
+0

No estoy usando AJAX en absoluto. Y el único navegador que he probado es Chrome. – 472084

+0

¡Excelente! Se corrigió mi problema Ajax con jQuery – Ondrej

0

Usted no es el único que tiene problemas con las sesiones de CakePHP en el navegador Chrome.

Pixelastic compañero codificador sugiere la following fix, cita:

Basta con crear archivo llamado session_custom.php en app/config/, deje caer las siguientes líneas en ella:

// Killing this config that was causing so much trouble with Chrome 
ini_set('session.referer_check', ''); 

// No session id in url 
ini_set('session.use_trans_sid', 0); 

// Using custom cookie name instead of PHPSESSID 
ini_set('session.name', Configure::read('Session.cookie')); 

// Cookie like time, depending on security level 
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 

// Cookie path 
ini_set('session.cookie_path', $this->path); 

asentando después Configure::write('Session.save', 'session_custom');core.php en su archivo.

+0

Esto parece útil, pero creo que es aproximadamente 1.3, no 2.1. Esta línea 'ini_set ('session.name', Configure :: read ('Session.cookie'));' creo que ya está agregada a 2.1 - Investigaré más a fondo – 472084

+0

Acabo de intentar con 'ini_set ('session.referer_check ',' '); 'línea y luego será su código completo y ninguno impidió que sucediera. Aunque creo que es un problema solo para Chrome. – 472084

0

el problema es con las sesiones:

primer lugar, compruebe ur 'phpinfo();'

compruebe si las sesiones están basadas en archivos.

Si es así, siga el proceso.

crear un nuevo archivo de script (PHP), que sólo contiene este código: <?php var_dump(session_save_path());?>

plazo que si se obtiene cadena nula o vacía y luego ir por este proceso:

  1. primero crear un directorio en su nombre de carpeta raíz 'xyz' o lo que quieras.
  2. hágalo escribir, es decir, chmod 777.
  3. vaya a la secuencia de comandos donde inicia las sesiones y antes de comenzar las sesiones cambie su session_save_path al directorio recién creado. es decir: session_save_path('pathToxyz');

y luego lo ha hecho.

si las sesiones se configuran como memoria: no se requiere configuración. solo usan la memoria del sistema. en ese caso, nunca habrías llegado a este problema.

+0

¿qué parte de phpinfo me dices lo que necesito saber? - 'var_dump (session_save_path());' me da 'string (20)"/var/lib/php/session "' – 472084

+0

ok sus sesiones están configuradas correctamente. así que esta no es su solución Intente 'var_dump' los datos de inicio de sesión en cada paso para que pueda obtener lo que está sucediendo en el programa. tal vez esto te ayude :) –

+0

¡Gracias de todos modos por tu ayuda! – 472084

1

Después de encontrarme con el mismo problema, he encontrado que esto fue causado por el valor de Session.cookieTimeout. Aunque la sesión de php todavía era válida, la fecha de caducidad de la cookie de sesión no se actualiza.

Esto es ahora mi sesión de configuración

Configure::write('Session', array(
     'defaults' => 'php', 
     'timeout' => 30, // The session will timeout after 30 minutes of inactivity 
     'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts 
     'checkAgent' => false, 
     'autoRegenerate' => true, // causes the session expiration time to reset on each page load 
    ));