it-swarm-es.tech

Cómo usar el método logout () sin duplicar el registro de sesión en db

Al importar desde una aplicación externa, creo nuevos usuarios y todas sus categorías, subcategorías y artículos. Para obtener la propiedad adecuada de todo el contenido, estoy iniciando sesión en el nuevo usuario, completando la importación de su contenido y luego cerrándolo. Todas las credenciales funcionan cuando se prueban desde la página de inicio de sesión del sitio.

Esto funciona bien, con el primer inicio de sesión funcionando como se esperaba. Sin embargo, el cierre de sesión parece estar "faltando" algo relacionado con la sesión porque se produce un error de entrada duplicada en #__session La próxima vez que se intenta ->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
}

Este error ocurre en application\cms.php, función checkSession` cuando intenta insertar la nueva sesión:

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

Claramente, hay más en la sesión que simplemente cerrar sesión, pero después de jugar con $session Por un tiempo, no puedo encontrar la receta para evitar que ocurra el error y permitir que se realice el siguiente inicio de sesión.

4
GDP

Todo parece estar vinculado a los usuarios invitados en el sitio. Agregar el siguiente código después de cerrar sesión resolvió el problema:

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