Сеансы Zend Framework Zend_auth перепутались

У меня два поддомена. У каждого поддомена есть собственная база данных аутентифицированных пользователей. я использую

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

чтобы проверить учетные данные пользователя. Он работает идеально для каждого отдельного поддомена. Но когда я вхожу в один поддомен и пытаюсь получить доступ к «ограниченной» странице в другом поддомене, не выходя из первого поддомена, мне нужно пройти через это. Обычно сеанс auth для первого поддомена возвращает true в '$ auth-> hasIdentity ()' для второго поддомена. Как я могу это решить?

РЕДАКТИРОВАТЬ: возможно, использование разных имен сеансов аутентификации может решить эту проблему, но, поскольку я использую код между этими двумя поддоменами, это невозможно.


person understack    schedule 23.12.2009    source источник
comment
мелкие обновления. проверьте новый код   -  person SMka    schedule 23.12.2009
comment
@SM: пожалуйста, посмотрите мои комментарии ниже в вашем решении. Спасибо.   -  person understack    schedule 23.12.2009
comment
сообщение обновлено с помощью Bootstraping без Zend_Application   -  person SMka    schedule 23.12.2009


Ответы (2)


делать где-нибудь в верхней части вашего 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);
person SMka    schedule 23.12.2009
comment
@SM: в моем файле начальной загрузки нет класса. Куда мне его поставить? - person understack; 23.12.2009
comment
@SM: в моем файле bootstrap.php есть обычные вызовы функций. Класс там не определен. Пользуюсь с версии 1.6.5. Хотя я обновился до 1.9. - person understack; 23.12.2009
comment
@SM: ох, понятно, ты имеешь в виду, что я должен добавить файл класса начальной загрузки zend? - person understack; 23.12.2009
comment
@SM: Я попытался поместить класс Bootstrap в файл zend / application / bootstrap / bootstrap.php и вызвал его внутри конструктора, но он никогда не попадал в условие if. - person understack; 23.12.2009
comment
прочтите zend_manual. ресурсы начальной загрузки требуют config. application.ini с resources.session.use_only_cookies = true например - person SMka; 23.12.2009

Вы должны ограничить файлы cookie аутентификации текущим поддоменом.

person erenon    schedule 23.12.2009
comment
@erenon: не могли бы вы немного объяснить? Как я могу это сделать? - person understack; 23.12.2009
comment
@erenon: вы имеете в виду, что я должен просто сохранить субдомен в cookie? Но тогда его можно было бы изменить для доступа ко второму поддомену? правильно? - person understack; 23.12.2009