Ruby on Rails: как назначить жесткое значение переменной?

Я использую несколько перенаправлений, и я хотел бы перенаправить из A->B->C->A.

Поэтому в B я сохраняю путь A как

@previouspage = request.referer

и поэтому @previouspage = A на данный момент, но когда я вызываю @previouspage в C, он не возвращает жесткое значение, сохраненное в B, но находит свой собственный относительный request.referer, которым является B.

Так что в C @previouspage = B (потому что я думаю, что переменные в Ruby - это soft-ссылки)

Как бы я просто сохранил значение request.referer в точке B, а затем сохранил этот URL в переменную, к которой я смогу получить доступ позже?

3 ответа

HTTP - это протокол без сохранения состояния: переменные не запоминаются между запросами. Если вы хотите сохранить состояние между запросами, вы можете использовать сеанс. В Rails это делается так:

В Б:

session[:page_a] = request.referer

В С:

@next_page = session[:page_a]

Руководство по безопасности Rails начинается с сессий и их уязвимостей. Вы можете проверить это.

Три вещи, необходимые для того, чтобы это работало

  • Использование сессий: session [:original_page]=request.referrer
  • Учет того факта, что сессии обновляются после входа в систему (проверьте, если ноль)
  • Не забывайте устанавливать сессию [:original_page]=nil сразу после использования в контроллере.

Переменные Rails не хранятся между запросами. Если вы хотите сохранить некоторые данные, вам следует:

  • Сохраните его в (сессии) куки
  • Сохраните это в базе данных
  • Вытащите некоторые трюки из вашего рукава и передайте рефереру как параметр или что-то в этом роде, но это совсем не рекомендуется.
Другие вопросы по тегам