2015-07-09 3 views
3

Я использую сеанс Symfony для хранения и выбора языка, выбранного пользователями на странице всплеска. Если у них нет языкового набора, они перенаправляются непосредственно на всплеск. Такое поведение работает так, как ожидалось.сеанс и кеш Symfony2: команда очистки

К сожалению, когда я очищаю кеш, у меня возникают проблемы с ним (я использую команду php app/console cache:clear --env=prod). Пользователи могут получить доступ к одной странице, а затем при каждом нажатии они будут перенаправлены на всплеск. Впоследствии, даже если они выберут язык, он не сможет продвинуться дальше, чем на главной странице, любой щелчок снова перенаправит на всплеск.

Если я удалю папку кэша вручную, ошибка не возникнет.

конфигурация

Моей связанная сессии является следующим:

framework: 
    session: 
     handler_id: ~ 
     gc_probability: 0 

У меня нет папки сеанса в мой каталог кэша. Я могу найти файлы своего сеанса в папке tmp моего сайта (идентификатор сеанса и содержимое соответствуют cookie сеанса пользователя и выбору языка). Они сохраняются после команды cache: clear, но похоже, что Symfony больше не может получать значения из этих файлов. Кроме того, для этого пользователя не создается новый файл сеанса, и, похоже, новый языковой выбор не может быть написан нигде.

Я не ошибка на моей локальной среде разработки (улучшенный Homestead), но он у меня на всех моих других средах (Dev, постановка, производство)

Использование $ session-> недействительными(); на странице всплеска будет исправлена ​​проблема. Но я хотел бы понять, почему это происходит. Есть идеи ?

+1

Почему вы установили 'gc_probability' в 0? И, полагаю, вы переопределяете 'session.save_path'? Если у вас есть другое поведение между экологическими проверками, что конфигурация не изменяется –

+0

Честно говоря, я не знаю, что такое gc_probability, поскольку я сам не запускал проект. Удалите эти настройки для использования по умолчанию. – Wanjee

+0

'session.save_path' не работает ни в конфигурации Symfony, ни в любом комплекте. Поэтому это должно быть по умолчанию '% kernel.cache.dir%/sessions', но это не то, что происходит, они хранятся в папке tmp. Значение параметра php 'session.save_path' устанавливается в'/srv/www/my_domain/var/tmp', и это место, где записаны файлы сеанса. – Wanjee

ответ

0

Вы можете изменить каталог, в котором Symfony сохраняет данные сеанса, поэтому, когда вы очищаете кеш, сеанс сохраняется. Вы можете сделать это, только нужно изменить конфигурацию фреймворка. В качестве примера:

#config.yml 
framework: 
    session: 
     save_path: "%kernel.root_dir%/sessions" 

Далее ссылки в doc

надеюсь, что это поможет

+0

Файлы сеанса хранятся в '/ srv/www/my_domain/var/tmp', поэтому вне папки кэша. Я не вижу связанного файла сеанса во всей директории кеша. Будет ли session.save_path из Symfony перезаписывать значение php.ini? – Wanjee

+0

Только для Symfony3. Вопрос был о Symfony2 (для каких сеансов в приложении/кеше//сеансах) –

Смежные вопросы