私は奇妙な問題を抱えています。私の CakePHP アプリでは、セッションをデータベースに保存しています。問題は、ユーザーがログインしてから、ログアウトせずに単にタブ/ウィンドウを閉じて終了した場合 (/logout
を呼び出すリンク$this->Session>-destroy()
)、次に誰かがサイトにアクセスしてログインしようとすると、ユーザーに白い画面が表示されることです。ユーザーが適切にログアウトすれば、すべて問題ありません。
/logout
リンクが手動で呼び出された場合、または のセッション テーブルからレコードを削除したdb
場合、または CakePHP のデバッグを に設定した場合、ユーザーは再度ログインできます1
。別のセッション ストレージ エンジンに切り替えると、すべてが機能しますが、そのエンジンを使い続けることが重要ですdb
。
ユーザーは頻繁にウィンドウを閉じてアプリを終了するため、少し問題になっています。この場合、破棄されていないセッションを適切に処理するにはどうすればよいですか?
ありがとう
更新: いくつかのテストの結果、本当の原因はログインではなく、Zend Gdata ライブラリを使用して Google アカウントのユーザーを取得する機能であることがわかりました。コードは次のとおりです: App::import('Vendor','Zend Oauth Consumer', array('file' => 'Zend/Oauth/Consumer.php'));
App::import('Vendor','Zend Gdata Gapps', array('file' => 'Zend/Gdata/Gapps.php'));
$CONSUMER_KEY = 'x';
$CONSUMER_SECRET = 'y';
$oauthOptions = array(
'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER,
'version' => '1.0',
'signatureMethod' => 'HMAC-SHA1',
'consumerKey' => $CONSUMER_KEY,
'consumerSecret' => $CONSUMER_SECRET
);
$consumer = new Zend_Oauth_Consumer($oauthOptions);
$token = new Zend_Oauth_Token_Access();
$httpClient = $token->getHttpClient($oauthOptions);
try {
$client = new Zend_Gdata_Gapps($httpClient,$domain);
$feed = $client->retrieveAllUsers(); //this line causes the white screen
$_SESSION['googleUsers'] = array();
foreach ($feed as $user) {
$cuser = array($user->login->username,$user->name->givenName,$user->name->familyName);
array_push($_SESSION['googleUsers'],$cuser);
}
$_SESSION['googleDomain'] = $domain;
} catch (Exception $e) {
$_SESSION['googleUsersError'] = 1;
}
デバッグがアクティブな場合はすべて機能しますが、デバッグが 0 に設定されている場合は、空白の画面しか表示されません。例外メッセージを取得しようとしましたが、表示されません。まるで「exit」か「die」が実行されたかのようです。誰もが前にそのような問題を抱えていましたか?