2012-04-19 10 views
6

Por cada tiempo $ this-> session-> set_userdata() o $ this-> session-> set_flashdata() se usa en mi controlador, otro identico "Set-Cookie: ci_session = ..." se agrega al encabezado http que envía el servidor.Campos duplicados "set-cookie: ci-session" en el encabezado por codeigniter

Múltiples campos de Set-Cookie, con el mismo nombre de cookie, en el encabezado http no está bien según rfc6265.

Entonces, ¿hay alguna manera de usar las sesiones codeigniter sin que cree múltiples "cookies set-set" idénticas?

(He usado rizo para verificar la cabecera HTTP)

Respuesta

5

cheque https://github.com/EllisLab/CodeIgniter/pull/1780

Por defecto cuando se utiliza el controlador de la cookie de sesión (cifrado o no cifrado), CI envía todo el "set-cookie" de cabecera cada vez que un nuevo valor se escribe en la sesión. Esto da como resultado el envío de múltiples encabezados al cliente.

Esto es un problema porque si se escriben demasiados valores en la sesión, los encabezados HTTP pueden crecer bastante y algunos servidores web rechazarán la respuesta. (Consulte http://wiki.nginx.org/HttpProxyModule#proxy_buffer_size)

La solución es ejecutar solo 'sess_save()' una vez justo después de que se envíen todos los demás encabezados antes de enviar los contenidos de la página.

0

Creo que se puede pasar una matriz a $this->session->set_userdata(); No he probado este código por lo que no es más que una sugerencia de probar algo a lo largo de estas líneas:

$data = array(
    'whatever' => 'somevalue', 
    'youget' => 'theidea' 
); 

$this->session->set_userdata($data); 

NB: Cuando digo que no he probado el código ... He utilizado este código y sé que funciona, quiero decir que no he probado si reducirá la cantidad de encabezados enviados.

+0

El problema es que codigniter crea una primera cookie de sesión solo para solicitar la página, por lo que con solo una llamada $ this-> session-> set_userdata() habrá dos "Set-Cookie: ci_session =. .. "s. – mathulus

+0

Personalmente, y con la experiencia de proyectos reales que usan CodeIgniter, no uso sesiones de CI. Prefiero usar sesiones de php nativas y funciones de sesiones nativas de php. – Dale

0

En mi caso, el error está en el navegador (Chrome). Almacena 2 cookies y las envía al servidor, lo que hace que el servidor cree una nueva sesión todo el tiempo. Lo arreglé borrando las cookies en el navegador. Espero que ayude a alguien. :)

Cuestiones relacionadas