web-dev-qa-db-fra.com

Comment utiliser la méthode logout () sans enregistrement de session dupliqué dans la base de données

Lors de l'importation à partir d'une application externe, je crée de nouveaux utilisateurs et toutes leurs catégories, sous-catégories et articles. Pour que tout le contenu soit correctement acheté, je connecte le nouvel utilisateur, achève l'importation de son contenu, puis le déconnecte. Toutes les informations d'identification fonctionnent lorsqu'elles sont testées à partir de la page de connexion du site.

Cela fonctionne très bien, la première connexion fonctionnant comme prévu. Cependant, la déconnexion semble "manquer" à un élément lié à la session car une erreur de saisie en double dans #__session Se produit lors de la prochaine tentative de ->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
}

Cette erreur se produit dans application\cms.php, fonction checkSession` lorsqu'il tente d'insérer la nouvelle session:

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

De toute évidence, la session ne se limite pas à la fermeture de session, mais après avoir bricolé pendant quelque temps avec $session, Je ne trouve pas la recette pour empêcher l’erreur de se produire et permettre la prochaine connexion.

4
GDP

Tout semble lié aux utilisateurs invités du site. L'ajout du code ci-dessous après la déconnexion a résolu le problème:

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