Возможны сеансы скрытого поля Rails?

#ruby-on-rails #ruby #forms #session #cookies

#ruby-on-rails #ruby #формы #сеанс #файлы cookie

Вопрос:

Возможно ли передать сеанс через скрытое поле формы? (т.Е. СООБЩЕНИЕ)

если да, то возможно ли переключение между стандартным методом и сеансами поля на основе каждого контроллера без потери информации?

Комментарии:

1. я не могу получить ваш вопрос. Можете ли вы рассказать нам четко?

2. Да, могу ли я вместо сеансов на основе cookie использовать скрытое поле формы, чтобы идентификатор сеанса отправлялся через HTTP POST-запрос? Я знаю, что вы можете передавать идентификатор сеанса через URL-адреса с помощью rails, мне было интересно, существует ли метод для HTTP POST, чтобы он не обязательно был в URL-адресе, а мог быть в поле. Вместо этого.

3. Что значит «пропустить сеанс»? У Rails есть переменная сеанса, которую вы можете использовать в контроллере, session[:anything] = «foo», которая затем возвращала бы «foo» для сеанса [:anything] в любых последующих запросах. Я не понимаю, почему вы хотели бы отправить сеанс через форму / POST.

4. Arcath, потому что я не могу использовать файлы cookie сеанса (они не проходят из-за межсайтовых политик), и я не хочу использовать URL-адреса, потому что они слишком открыты.

5. также на многих старых телефонах есть браузеры, которые плохо поддерживают файлы cookie

Ответ №1:

Если cookies отключены, CGI: сеансы автоматически переключатся на использование скрытых полей, однако я не уверен точно, как такое поведение поддерживается в Rails. Более того, изменение этого поведения, требующее использования скрытых полей, может потребовать модификации CGI: Session.

Если на клиенте отключены файлы cookie, идентификатор сеанса должен быть включен в качестве параметра всех запросов, отправляемых клиентом на сервер. Класс CGI::Session совместно с классом CGI прозрачно добавят идентификатор сеанса в качестве скрытого поля ввода во все формы, созданные с использованием метода генерации HTML CGI#form(). Не предусмотрена встроенная поддержка других механизмов, таких как перезапись URL. Вызывающий отвечает за извлечение идентификатора сеанса из атрибута session_id и ручное кодирование его в URL-адресах и добавление в качестве скрытого ввода в HTML-формы, созданные другими механизмами. Кроме того, истечение срока действия сеанса не обрабатывается автоматически.

Следовательно, должна быть возможность использовать этот метод, но, насколько я знаю, он не поддерживается как простой вариант в Rails.

Для ясности, даже хранилище сеансов ActiveRecord использует cookies, поэтому не приравнивайте хранилища сеансов к тому, как данные сеанса обрабатываются клиентом.

Наконец, когда-то существовали плагины для поддержки такого поведения, но эти плагины старые и, похоже, не поддерживают Rails 3. Смотрите раздел «Сеанс без файлов cookie» в сеансах и файлах cookie в Ruby on Rails

Комментарии:

1. Да, я знаю о старом gem скрытой формы сеанса, но, похоже, я не могу найти код, который я надеялся увидеть, как это работает, и посмотреть, смогу ли я его взломать.

2. Я думаю, что рассмотрю аутентификацию на основе токенов