web-dev-qa-db-ja.com

dbに重複するセッションレコードなしでlogout()メソッドを使用する方法

外部アプリからインポートするときに、新しいユーザーとそのすべてのカテゴリ、サブカテゴリ、および記事を作成しています。すべてのコンテンツの適切な所有権を取得するには、新しいユーザーをログインさせ、コンテンツのインポートを完了してからログアウトします。サイトのログインページからテストすると、すべての資格情報が機能します。

これは問題なく機能し、最初のログインは期待どおりに機能します。ただし、次回->login()を試行すると、_#__session_の重複エントリエラーが発生するため、ログアウトはセッションに関連する何かを「欠落」しているように見えます。

_$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
}
_

このエラーはapplication\cms.phpで発生し、新しいセッションを挿入しようとすると、関数checkSession`になります。

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

明らかに、ログアウトする以上のことがセッションにありますが、しばらく_$session_をいじった後、エラーの発生を防ぎ、次のログインを許可するレシピを見つけることができません。

4
GDP

これはすべて、サイトのゲストユーザーに関連付けられているようです。ログアウト後に以下のコードを追加すると、問題が解決しました。

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