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 не хранятся между запросами. Если вы хотите сохранить некоторые данные, вам следует:
- Сохраните его в (сессии) куки
- Сохраните это в базе данных
- Вытащите некоторые трюки из вашего рукава и передайте рефереру как параметр или что-то в этом роде, но это совсем не рекомендуется.