我有一个奇怪的问题。在我的 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 时,只会出现一个空白屏幕。我试图获取异常消息,但它也没有出现。似乎执行了“退出”或“死亡”。以前有人遇到过这样的问题吗?