2012-04-19 14 views
6

Per ogni volta $ this-> session-> set_userdata() o $ this-> session-> set_flashdata() viene utilizzato nel mio controller, un altro identico "Set-Cookie: ci_session = ..." viene aggiunto all'intestazione http che il server invia.Campi "set-cookie: ci-session" duplicati nell'intestazione di codeigniter

I campi Set-Cookie multipli, con lo stesso nome cookie, nell'intestazione http non sono corretti in base a rfc6265.

Quindi esiste un modo per utilizzare le sessioni di codeigniter senza creare più "set-cookie:" s?

(ho usato curl per verificare l'intestazione http)

risposta

5

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

Per impostazione predefinita quando si utilizza il gestore cookie di sessione (criptato o in chiaro), CI invia l'intero "set-cookie" intestazione ogni volta che un nuovo valore viene scritto nella sessione. Ciò si traduce in più intestazioni inviate al client.

Questo è un problema perché se nella sessione vengono scritti troppi valori, le intestazioni HTTP possono diventare piuttosto grandi e alcuni server Web rifiuteranno la risposta. (vedi)

La soluzione è di eseguire 'sess_save()' una sola volta dopo aver inviato tutte le altre intestazioni prima di emettere il contenuto della pagina.

0

io credo che si possa passare un array di $this->session->set_userdata(); non ho ancora testato questo codice in modo che è solo un suggerimento per provare qualcosa in queste righe:

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

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

NB: quando dico che non ho testato il codice .. Ho usato questo codice e so che funziona, voglio dire che non ho testato se ridurrà la quantità di intestazioni inviate.

+0

Il problema è che codigniter crea un primo cookie di sessione solo per richiedere la pagina, quindi con una sola chiamata $ this-> session-> set_userdata() ci saranno due "Set-Cookie: ci_session =. .."S. – mathulus

+0

Personalmente, e con esperienza di progetti reali che utilizzano CodeIgniter, non utilizzo sessioni CI. Preferisco di gran lunga utilizzare le sessioni native di php e le funzioni native della sessione php. – Dale

0

Nel mio caso, l'errore è nel browser (Chrome). Memorizza 2 cookie e li invia entrambi al server, questo rende il server che crea sempre nuove sessioni. Ho risolto il problema cancellando i cookie nel browser. Spero che aiuti qualcuno. :)

Problemi correlati