9

Sto usando ionAuth & sembra che mi stia disconnettendo quasi casualmente? Sto usando Codeigniter v2.1.4 - registra perfettamente ma comunque ionAuth sembra disconnettere a caso interi, c'è un modo per forzare la sessione a rimanere attiva fino a quando non chiamo la funzione ionAuth-> logout?IonAuth - sembra che mi stia casualmente disconnettendo

mio CI config assomiglia come segue:

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

mio file di configurazione ion_auth appare come segue:

$config['user_expire'] = 0; 
$config['user_extend_on_login'] = FALSE; 

Qualcuno può darmi eventuali indicazioni su quello che potrebbe essere la causa del problema (s) ?

+0

si stanno facendo le richieste Ajax da qualche parte? ci sono problemi con la classe di sessione di CI e le condizioni di gara che non sono state ancora completamente risolte – jmadsen

+0

Sto usando richieste di jax - sulla homepage c'è una richiesta di jax che fondamentalmente fa una richiesta GET per cercare una tabella di database. – Zabs

risposta

15

La causa del problema è una rotazione cookie di sessione quando viene effettuata una chiamata AJAX, la correzione adeguata è stata inclusa in CodeIgniter 3

Sono disponibili quattro opzioni:

Cope: I affrontato questo problema prima senza sapere esattamente la causa di ciò. In breve, ho salvato la promessa di ogni XMLHttpRequest, se il codice di stato HTTP 401 fosse stato riscontrato, l'applicazione client avrebbe richiesto le credenziali sotto forma di popup e poi avrebbe ripreso la promessa di AJAX.

lato client con jQuery, basta aggiungere questo gestore ajaxError:

$(document).ajaxError(function (e, xhr, settings, exception) { 
    if (xhr.status == 401) 
    { 
     // open your popup 
     $('#login-popup').modal('open'); 

     // attach the xhr object to the listener 
     $(document).bind("retry-xhr", { 
       xhro: xhr 
      }, 
      function(event) { 
      // retry the xhr when fired 
      $.ajax(event.data.xhro); 
     }); 
    } 
}); 

e quando si è connessi indietro nel, basta chiamare questo per ripetere la richiesta: lato

$(document).trigger('retry-xhr'); 

Server, è solo è necessario aggiungere un if nel tuo costruttore

if (!$this->session->userdata('logged_in') && $this->input->is_ajax_request()) 
     { 
      $this->output->set_status_header('401'); 
      exit; 
     } 

Questo è stato utile perché alcuni utenti avrebbero lasciato La finestra della loro app Web è aperta durante la notte e il timeout della sessione si avvia. Quindi gli utenti mi chiamerebbero per non poter eseguire alcuna funzione AJAX e dovrei dire loro di premere F5

ps. se da angolare, ho usato l'Auth Interceptor modulo HTTP con successo

Hack: vedere questo post, la sua soluzione è quella di creare un altro campo nella tabella ci_session e verificare la presenza di entrambi i cookie, quindi la sessione sarà ancora valida dopo la rotazione.

Si spiega anche nel dettaglio che cosa sta causando questo glitch

http://www.hiretheworld.com/blog/tech-blog/codeigniter-session-race-conditions

Aggiornamento: Iniziare a utilizzare la versione successiva dove è già fissato:

https://github.com/EllisLab/CodeIgniter/tree/release/3.0

Patch Sostituire la linea 346 nel sistema/librerie/Session.php (funzione sess_update())

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now) 

Con:

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now || $this->CI->input->is_ajax_request()) 
+0

Ci proverò - c'è una buona guida per l'aggiornamento dalla v2.1.4 alla v3 di codeigniter? Dovrò fare un sacco di soluzioni alternative per la mia app v2 per renderla compatibile con v3? – Zabs

+1

Dipende da cosa fa la tua applicazione, il più grande cambiamento a mio avviso è che alcune funzioni ora restituiscono ** null ** invece di ** false **. Se la logica della tua app dipende da questo, ti divertirai moltissimo per quei nomi di funzioni. Credo che questa sia la guida più consueta per l'aggiornamento: [Aggiornamento a CI 3,00] (https://www.chuongduong.net/ci3/installation/upgrade_300.html) –

+0

grazie per quello - ho intenzione di provare questo a breve ma in entrambi i casi ti darà la quantità di informazioni utili che hai fornito - grazie ancora :) – Zabs