HDApache
@HDApache
PHP программист

YII2 и SYMFONY2 — как обстоят дела с сессиями?

Некоторое время пишу на YII (первой ветки). Сейчас готовится проект, который ждет высокая нагрузка.

Имеется выделенный сервер 16 процессоров, 24G ОЗУ. На нем стоит CentOS 6.5 с KWM (хост) в KWM стоит Debian 7.3 (виртуальный сервер)

На хосте nginx выступает как балансировщик нагрузки (планируется в случае нехватки ресурса поставить 2-й, 3-й ... N-й сервер). Он же может выступит прозрачным прокси (пока не настраивал, ввиду тех же граблей что описаны ниже).

На виртуальной машине NGINX + PHP5-FPM ну и собственно сам сайт на YII

Так вот, при настройке fastcgi_cache столкнулся с непреодолимой проблемой, дело в том, что в кэш залетает и кука с PHPSESSID, следовательно кто первый зайдет тот и сгенерит кэш со своей сессией, а второй третий и так далее (пока кэш не протухнет) получит таким образом чужие куки. Можно, конечно, не пускать куку в кэш (fastcgi_hide_header "Set-Cookie";) НО! тогда не работает авторизация так как именно в куках YII хранит CSRF токен.

Вся беда в том, что YII даже для не авторизованных пользователей запускает сессию и в конфиге 'autoStart'=>false не спасет так как при первом же обращении Yii::app()->user сессия все равно запустится.

Вопрос к знатокам YII2 и SYMFONY2, указанные фреймворки для гостей тоже стартуют сессию или нет?

Вопрос №2 - может, есть способ красиво решить "мою" проблему?
  • Вопрос задан
  • 5203 просмотра
Решения вопроса 1
SamDark
@SamDark
Yii2 core team
Yii 2.0 не стартует сессию пока она действительно не понадобится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
metamorph
@metamorph
Хмм.
Честно говоря, лень искать, но вроде бы недавно в коммитах Yii2 проскакивала возможность отключения автостарта сессии. Делалось это для REST API.
Ответ написан
0neS
@0neS
Может это и неправильно, но, я думаю, можно переписать метод CWebUser::init()
public function init() {
    ...
    if (!$this->getIsGuest())
		Yii::app()->getSession()->open();
    ...
}

P.S. Yii 1.1.14
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы