it-swarm-eu.dev

Come utilizzare il metodo logout () senza record di sessione duplicati in db

Durante l'importazione da un'app esterna, sto creando nuovi utenti e tutte le loro categorie, sottocategorie e articoli. Per ottenere la proprietà corretta di tutto il contenuto, sto accedendo al nuovo utente, completando l'importazione per il suo contenuto, quindi disconnettendomi. Tutte le credenziali funzionano quando testate dalla pagina di accesso del sito.

Funziona bene, con il primo accesso funziona come previsto. Tuttavia, il logout sembra "mancare" qualcosa correlato alla sessione perché si verifica un errore di inserimento duplicato in #__session Al successivo tentativo di ->login().

$app = JFactory::getApplication();
foreach($imports as $import) {
    $credentials = array();
    $credentials['username'] = $import->username;
    $credentials['password'] = 'abc123';
    $app->login($credentials))        // Error occurs here the 2nd time this executes
        ...
        ... all the importing work that works as expected.
        ...
    $app->logout;   // Logout completes
}

Questo errore si verifica in application\cms.php, checkSession della funzione` quando tenta di inserire la nuova sessione:

Duplicate entry '' for key 'PRIMARY' SQL=INSERT INTO 'xyz_session' ('session_id', 'client_id', 'guest', 'time', 'userid', 'username') VALUES ('', 0, 1, '0', 0, '')

Chiaramente, c'è di più nella sessione oltre al semplice logout, ma dopo aver armeggiato con $session Per un po ', non riesco a trovare la ricetta per prevenire l'errore e consentire il successivo accesso.

4
GDP

Sembra tutto legato agli utenti ospiti sul sito. L'aggiunta del codice seguente dopo la disconnessione ha risolto il problema:

$app->logout();
$session =& JFactory::getSession();
$session->destroy();
$session->start();
1
GDP