【问题标题】:Zend Framework Zend_auth sessions getting mixed upZend 框架 Zend_auth 会话搞混了
【发布时间】:2010-12-29 09:40:04
【问题描述】:

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

$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()){ }

检查用户登录凭据。它适用于每个单独的子域。但是,当我登录一个子域并尝试访问另一个子域中的“受限”页面而不从第一个子域注销时,它需要我通过。基本上,第一个子域的“auth”会话在第二个子域的“$auth->hasIdentity()”中返回 true。我该如何解决这个问题?

编辑:可能使用不同的身份验证会话名称可能会解决它,但由于我在这 2 个子域之间共享代码,因此这是不可行的选择。

【问题讨论】:

  • 小更新。检查新代码
  • @SM:请在您的解决方案中查看我的 cmets。谢谢。
  • 帖子在没有 Zend_Application 的情况下使用 Bootstraping 更新

标签: zend-framework authentication session login


【解决方案1】:

在你的 Bootstrap 顶部做某处

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_Application

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

【讨论】:

  • @SM:我的引导文件中没有类。我应该把它放在哪里?
  • @SM:我的 bootstrap.php 文件中有正常的函数调用。那里没有定义类。我从 1.6.5 版开始使用它。虽然我已经升级到 1.9。
  • @SM:哦,我明白了,你的意思是我应该放入 zend 引导类文件?
  • @SM:我尝试将 Bootstrap 类放入 zend/application/bootstrap/bootstrap.php 文件中并在构造函数中调用,但它从未进入“if”条件。
  • 阅读 zend_manual。引导资源需要配置。 application.ini 以resources.session.use_only_cookies = true 为例
【解决方案2】:

您应该将身份验证 cookie 限制为当前子域。

【讨论】:

  • @erenon:你能解释一下吗?我该怎么做?
  • @erenon:你的意思是我应该简单地将子域保存在 cookie 中吗?但是可以修改它以访问第二个子域吗?对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2017-04-24
相关资源
最近更新 更多