redireccionar pasar configurar como automaticamente php cakephp session

php - configurar - La sesión no se guarda al pasar de ssl a no ssl



configurar https moodle (7)

¿Su página de inicio tiene algún flash que hace una solicitud posterior a su servidor? O cualquier carga de Ajax de contenido?

¿Ha comprobado que los encabezados se envían desde el servidor? En IE puedes usar Fiddler o en Firefox usar el complemento Live Headers. Verifique si se están estableciendo nuevas cookies o si la cookie CAKEPHP tiene un valor diferente.

Tengo una pantalla de inicio de sesión que forzo a ser ssl, así que esto: https://www.foobar.com/login luego, después de iniciar sesión, se mueven a la página de inicio: https://www.foobar.com/dashbaord

Sin embargo, quiero alejar a las personas de SSL una vez que inicie sesión (para ahorrar CPU), por lo que justo después de verificar que de hecho están conectados en https://www.foobar.com/dashbaord los muevo a http: // www.foobar.com/dashbaord

Bueno, esto siempre parece eliminar las variables de sesión, porque cuando la página se ejecuta nuevamente, confirma que están conectados (como lo hacen todas las páginas) y la sesión parece no existir, por lo que los mueve a la pantalla de inicio de sesión.

Oddness / hallazgos:

  1. Artículo de lista
  2. El segundo inicio de sesión siempre funciona, y felizmente me lleva a http://www.foobar.com/dashbaord
  3. Crea con éxito una cookie el primer inicio de sesión
  4. Si inicio sesión dos veces, luego salgo, y vuelvo a iniciar sesión, no necesito dos inicios de sesión (parece que he rastreado esto al hecho de que la cookie existe). Si borro la cookie, regreso a dos inicios de sesión.
  5. Después del segundo inicio de sesión, puedo pasar de non-ssl a ssl y la sesión persiste.
  6. En el primer inicio de sesión, el cambio al sitio no ssl borra por completo la sesión, regresar manualmente al sitio ssl todavía me obliga a iniciar sesión de nuevo.
  7. El segundo inicio de sesión usando exactamente el mismo mecanismo que el primero, a través de ssl

Lo que probé:

  1. Jugar con la configuración de Cake para security.level y session.checkagent - nothing
  2. Tener Cake Store las sesiones en db (a diferencia del sistema de archivos) - nada
  3. Prueba en FF, IE, Chrome en una máquina XP.

Entonces siento que esto es algo relacionado con la cookie que se está creando pero que no se está leyendo.

Entorno: 1. Debian 2. Apache 2 3. Mysql 4 4. PHP 5 5. CakePHP 6. Las sesiones se guardan PHP por defecto, como archivos


En primer lugar, ¿entiendo correctamente que el segundo inicio de sesión utiliza exactamente el mismo mecanismo que el primero (a través de HTTPS)?

¿El primer golpe en una página no segura crea una nueva sesión, además de la creada durante el inicio de sesión?

Compruebe si, al primer inicio de sesión, la cookie no está configurada con el indicador de Secure (eso significa que la cookie solo debe enviarse a través de una conexión segura (HTTPS)).


Me di cuenta de esto. Cake estaba cambiando el valor ini de session.cookie_secure sobre la marcha mientras estaba bajo las conexiones SSL automáticamente, por lo que la cookie que se estaba creando era una cookie segura, que la segunda página no reconocería.

Solución, comentar la línea /cake/lib/session.php 420 ish:

ini_set (''session.cookie_secure'', 1);

(Solo busque eso para encontrarlo, ya que estoy seguro de que la línea # cambiará a medida que se publiquen las versiones).


simplemente me topé con este problema, comenté
ini_set (''session.name'', Configure :: read (''Session.cookie''));
de session.php (/ cake / lib / session.php, línea 480 ~) y funcionó bien.


Puede especificar su propia configuración de manejo de sesión en un archivo de configuración (en lugar de editar el archivo de la biblioteca CakePHP). En el archivo de configuración, puede establecer session.cookie_secure en 0, que tendrá prioridad sobre la configuración en / cake / lib / session. php. Esto permitirá que la cookie de sesión se use para conexiones SSL y no SSL.

Aquí hay una entrada de blog sobre el tema: http://bakery.cakephp.org/articles/view/how-to-bend-cakephp-s-session-handling-to-your-needs

y alguna documentación del Cookbook: http://book.cakephp.org/view/173/Sessions


Si bien la respuesta aceptada cumple con el deseo del OP de "sacar a las personas de SSL una vez iniciada la sesión", es terriblemente insegura ya que expone la sesión del usuario al secuestro (ver Firesheep para una explotación fácil).

Un mejor compromiso entre el comportamiento predeterminado de CakePHP (que requiere que todas las páginas se publiquen SSL después de que un usuario se autentique mediante SSL) y la respuesta aceptada (que sirve para todas las páginas autenticadas sin cifrar y expone la cookie autenticada) es servir páginas encriptadas mediante SSL si y solo si requieren autenticación.

Una manera fácil de lograr esto es mantener dos cookies de sesión, una que se sirve de forma segura y contiene la información de autenticación y otra que se sirve insegura. Una implementación simple para soportar un enfoque de sesión dual usará un session_handler para anular el nombre de la sesión así:

if (env(''HTTPS'')) { ini_set(''session.name'', Configure::read(''Session.cookie'').''-SECURE''); }else{ ini_set(''session.name'', Configure::read(''Session.cookie'')); }

Un elemento a tener en cuenta con este enfoque es que para vincular desde una página que no es SSL directamente a una página que requiere autenticación, deberá vincular explícitamente con https, ya que deberá enviar la cookie de sesión que contiene la información de autenticación y el navegador solo lo hará si el enlace está encriptado.


Puede leer más en la documentación de CakePHP en http://book.cakephp.org/2.0/en/development/sessions.html. La configuración predeterminada de CakePHP es establecer session.cookie_secure en verdadero, cuando su aplicación está en un protocolo SSL. Si su aplicación sirve tanto de protocolos SSL como no SSL, entonces puede tener problemas con la pérdida de sesiones. Si necesita acceder a la sesión tanto en dominios SSL como no SSL, querrá deshabilitar esto:

Abre el archivo Config / core.php y lo agrega como abajo

Configure::write(''Session'', array( ''defaults'' => ''php'', ''ini'' => array( ''session.cookie_secure'' => false ) ));

Ahora puedes cambiar http y https que no pierden sesión :)