0

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

4

1 回答 1

0

终于想出了如何解决这个问题。根据此页面 - http://framework.zend.com/manual/1.12/en/zend.gdata.gapps.html#zend.gdata.gapps.nicknames.creating我将有问题的行更改$feed = $client->retrieveAllUsers();$feed = $client->getUserFeed(),这似乎是替代功能。

于 2013-04-23T10:47:20.457 回答