2013-05-24 15 views
10

Sto lavorando a un sito Web creato con CodeIgniter 2.1.0.C'è qualche errore noto nella libreria di sessione di CodeIgniter 2.1.0? Perché vengo espulso?

Ho notato qualche volta quando ricarico una pagina un paio di volte o apro un paio di pagine molto velocemente o quando ho un errore nel codice (questi errori non sono legati alle sessioni) mi disconnetto.

Questo sito web utilizza una libreria chiamata Ion_authand per identificazioni:

public function logged_in() 
{ 
    $identity = $this->ci->config->item('identity', 'ion_auth'); 
    return (bool) $this->ci->session->userdata($identity); 
} 

C'è un bug o qualcosa che dovrei sapere?

$config['sess_cookie_name'] = 'cisession'; 
$config['sess_expiration'] = 7200; 
$config['sess_expire_on_close'] = TRUE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name'] = 'cisession'; 
$config['sess_match_ip'] = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

In questo sito Web, le sessioni vengono aggiornate quasi su ogni pagina.

+0

Esiste un problema noto che può causare un aumento eccessivo dell'intestazione Content-Length di HTML. Si verifica perché CI invia l'intera intestazione "Set-Cookie" ogni volta che viene effettuata una richiesta a 'set_userdata()' o 'unset_userdata()'.Questo in genere non è un problema, tuttavia se i tuoi utenti sono dietro a un proxy severo (una grande azienda o un istituto scolastico), potrebbero causare il fallimento della sessione. https://github.com/EllisLab/CodeIgniter/issues/1345 – Jeemusu

+0

C'è anche un bug noto riguardo le sessioni e le chiamate ajax. –

+0

@Cryode che potrebbe essere .... c'è qualche soluzione per questo? – max

risposta

10

Ecco cosa ho trovato:

c'è un bug nella libreria sessione CodeIgniter che distrugge la sessione con le richieste rapidi.

Qui potete trovare maggiori informazioni su questo bug:

https://github.com/EllisLab/CodeIgniter/issues/154 

Questo bug esiste ancora nella sua ultima versione stabile che è 2.1.3.

Ho risolto questo sostituendo mia biblioteca sessione con quella da CI3-DEV da GitHub:

https://github.com/EllisLab/CodeIgniter/blob/b211adee89f5fd2192051e9c0826146bd150f469/system/libraries/Session.php 

E mettendo un lungo sess_expiration e sess_time_to_update nella mia configurazione ... le mie sono 86400 e 86500.

+0

Darò a questo uno scatto .. questo bug dovrebbe essere corretto da EllisLabs davvero .. toccare il legno iniziano a tornare su di esso – Zabs

+0

Questo è * ancora * un problema in 2.1.4 che è sconcertante. Inizialmente ho provato semplicemente 'return'ing immediatamente da' sess_update() ', ma ahimè, questo non funziona, anche con un lungo' sess_time_to_update'. Grazie per la tua risposta, spero che possa aiutarti. – PaulSkinner

+0

@PaulSkinner è un po 'tardi ma metti una lunga sess_expiration e sess_time_to_update nella tua configurazione .... le mie sono 86400 e 86500 – max

7

CodeIgniter salva i dati di sessione nei cookie. Se i dati di sessione hanno un carattere speciale che disattiva il cookie, anche la sessione viene distrutta.

Crea anche qualche altro problema di limite di dimensioni. Cookie può salvare una dimensione limitata dei dati a seconda del browser. Se si tenta di memorizzare più dati in una sessione CodeIgniter e come CodeIgniter tenta di salvarlo nel cookie, potrebbe non salvare più di quel limite.

Anche se il cookie viene inviato tramite la rete, aggiunge inutilmente traffico alla rete. Tutti i dati di sessione non devono essere salvati nel cookie.

È preferibile utilizzare una libreria di sessione nativa. Usa la sessione nativa di PHP.

https://github.com/EllisLab/CodeIgniter/wiki/Native-session

o

https://github.com/EllisLab/CodeIgniter/wiki/PHPSession

È possibile confrontare i due.

Fare riferimento alla documentazione della sessione CodeIgniter su come CodeIgniter memorizza i dati di sessione.

http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

+0

stai dicendo che salva i dati della sessione in un cookie vero? sul server? ... pensavo che li salvasse nel database? – max

+0

sì, per impostazione predefinita la CI memorizza i dati di sessione solo nei cookie. È inoltre possibile archiviarli anche nel database. Ma ancora salverà nel database di Cookie +. Si prega di consultare http://ellislab.com/codeigniter/user-guide/libraries/sessions.html – vishal

+0

grazie, lo so che ma come potete vedere nelle impostazioni ho '$ config ['sess_use_database'] = TRUE' quindi è non la cosa dei cookie ... sto andando a testare la sessione nativa e vedere cosa succederà – max

Problemi correlati