Генерация StateKeyPrefix у сессий

Уже исправленные репорты или принятые предложения
Ответить
johnluxor
Сообщения: 82
Зарегистрирован: 2010.09.10, 19:39

Генерация StateKeyPrefix у сессий

Сообщение johnluxor » 2013.05.21, 14:07

Есть приложение на Yii;
В нем два входных файла.

index.php и admin.php

Соответственно в каждом из них подгружается свой конфиг.

Вчера приводя приложение уже в готовый вид, я прописал в конфиге, в директиве name, значение "Имя сайта".
И тут вдруг перестала работать сквозная авторизация, а именно каждый экземпляр приложения стал генерировать свой stateKeyPrefix.

Долго копался, в итоге, в файл CWebUser.php:532 есть строки

Код: Выделить всё

/**
     * @return string a prefix for the name of the session variables storing user session data.
     */
    public function getStateKeyPrefix()
    {
        if($this->_keyPrefix!==null)
            return $this->_keyPrefix;
        else
            return $this->_keyPrefix=md5('Yii.'.get_class($this).'.'.Yii::app()->getId());
    }
Что я вижу, что keyPrefix если явно не установлен, генерируется из md5 имени класса и некого getId()

CApplication.php:212

Код: Выделить всё

    /**
     * Returns the unique identifier for the application.
     * @return string the unique identifier for the application.
     */
    public function getId()
    {
        if($this->_id!==null)
            return $this->_id;
        else
            return $this->_id=sprintf('%x',crc32($this->getBasePath().$this->name));
    }
И тут оказалось, что он генерится в зависимости от имени приложения, а именно директивы name, которую я до этого установил.

Ставлю это в багрепорт, потому что, как мне кажется, не есть правильно, от заголовка сайта генерировать ID, а он большинстве используется как заголовок и это даже есть в демо блоге и соотвтественно может быть разным

Аватара пользователя
samdark
Администратор
Сообщения: 8773
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Генерация StateKeyPrefix у сессий

Сообщение samdark » 2013.05.21, 14:59

Надо выставлять id помимо name в конфиге. В приложении, генерируемом yiic webapp это делается.

johnluxor
Сообщения: 82
Зарегистрирован: 2010.09.10, 19:39

Re: Генерация StateKeyPrefix у сессий

Сообщение johnluxor » 2013.05.21, 15:29

В любом случае, достаточно не явная генерация.
И в доках я это не помню чтобы видел.

Аватара пользователя
samdark
Администратор
Сообщения: 8773
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Генерация StateKeyPrefix у сессий

Сообщение samdark » 2013.05.21, 20:56

Генерация из имени только если нет id. Как запасной вариант. По умолчанию в конфиге id имеется. Ситуация когда его убрали не очень частая. Не думаю, что стоит отдельно упоминать.

Ответить