#ruby-on-rails
#ruby-on-rails
Вопрос:
У меня установлен сеанс, но, похоже, он не переносится на другие страницы. Я использую Rails 2.3.5 и Ruby 1.8.7. Кто-нибудь еще сталкивался с этой проблемой?
Комментарии:
1. Можете ли вы вставить какой-нибудь код того, что делаете…..
Ответ №1:
У меня была эта проблема в Rails 3.1, когда проверка CSRF завершилась неудачей. Это может произойти, если вы используете тег вручную, а не генерируете его с помощью одного из встроенных методов, предоставляемых Rails.
Найдите в своем файле журнала «csrf» (поиск без учета регистра). Если вы видите запись в журнале, показывающую сбой csrf, скорее всего, Rails сбрасывает ваш сеанс.
Ответ №2:
Возможно, вы теряете сеанс между запросами, что может произойти, если он изначально не установлен должным образом. Если вы проверите свои файлы cookie, вы можете увидеть, что идентификатор сеанса изменяется, переназначается из-за сбоя проверки.
Также возможно, что он назначается домену, который впоследствии отклоняется браузером. Это происходит, если приложение настроено на использование определенного домена, а затем повторно размещено под другим, даже localhost
.
Комментарии:
1. Странно то, что это работает на одном компьютере, а не на другом. Итак, это говорит мне о том, что код правильный, а какая-то конфигурация на моем компьютере неправильная.
2. Вы должны удалить файлы cookie на этом затронутом компьютере, по крайней мере, для соответствующего домена. Одна из проблем, которую я обнаружил, заключается в том, что у меня есть cookie для
www.example.com
иexample.com
, когда некоторые посещаемые браузерыwww.example.com
будут случайным образом переключаться между двумя назначенными файлами cookie, посколькуwww.example.com
будут использовать файлы cookie, назначенныеexample.com
, сеансы переключаются без какого-либо смысла или причины. Именно по таким причинам вы всегда должны перенаправлять посетителей на единственный канонический URL.
Ответ №3:
Возможно, вы не использовали мета-тег csrf в своем макете. Попробуйте удалить ‘ protect from forgery’ в application_controller.rb в папке controllers. Затем попробуйте запустить приложение еще раз, если оно работает, значит, вы не добавляли теги в свой макет.