Zend framework Zend框架Zend_身份验证会话混淆

Zend framework Zend框架Zend_身份验证会话混淆,zend-framework,authentication,session,login,Zend Framework,Authentication,Session,Login,我有两个子域。每个子域都有自己的已验证用户数据库。我正在使用 $auth = Zend_Auth::getInstance(); if($auth->hasIdentity()){ } 检查用户登录凭据。它适用于每个单独的子域。但当我登录到一个子域并尝试访问另一个子域中的“受限”页面而不从第一个子域注销时,它会让我通过。基本上,第一个子域的“auth”会话在第二个子域的“$auth->hasintity()”中返回true。我怎样才能解决这个问题 编辑:可能使用不同的身份验证会话名称可以

我有两个子域。每个子域都有自己的已验证用户数据库。我正在使用

$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()){ }
检查用户登录凭据。它适用于每个单独的子域。但当我登录到一个子域并尝试访问另一个子域中的“受限”页面而不从第一个子域注销时,它会让我通过。基本上,第一个子域的“auth”会话在第二个子域的“$auth->hasintity()”中返回true。我怎样才能解决这个问题


编辑:可能使用不同的身份验证会话名称可以解决此问题,但由于我在这两个子域之间共享代码,因此这是不可行的选择。您应该将身份验证cookie限制在当前子域。

在引导程序顶部的某个位置执行此操作

protected function _initModifiedSession()
{
    if ($this->hasPluginResource('session'))
    {
        $resourcesOptions = $this->getOption('resources');
        $resourcesOptions['resources']['session']['cookie_domain'] = $_SERVER['HTTP_HOST'];
        $this->setOptions($resourcesOptions);
        $this->bootstrap('session');
    }
}
更新1
没有Zend_应用程序

    $sessionOptions = array(
        'cookie_domain' => $_SERVER['HTTP_HOST']
    );
    Zend_Session::setOptions($sessionOptions);

@埃伦:你能解释一下吗?我该怎么做?@erenon:你的意思是我应该把子域保存在cookie中吗?但是它可以被修改以访问第二个子域吗?对吧?小更新。检查新的code@SM:请在您的解决方案中查看我的评论。谢谢。帖子更新了Bootstraping而没有Zend_Application@SM:我的引导文件中没有类。我应该把它放在哪里?@SM:我的bootstrap.php文件中有正常的函数调用。这里没有定义类。我从1.6.5版开始使用它。虽然我已经升级到了1.9。@SM:ohh我明白了,你是说我应该把zend引导类文件放进去?@SM:我试图把zend/application/bootstrap/bootstrap.php文件放进引导类,并调用了内部构造函数,但它从未进入“if”条件。请阅读zend_手册。引导资源重新查询配置。例如,application.ini和resources.session.use_only_cookies=true