Sinatra не настаивает на сеансе с переадресацией на Chrome

Sinatra не поддерживает мою сессию с переадресацией на Chrome. Он создает совершенно новый сеанс, и я теряю все свои предыдущие данные сеанса.

В качестве примера (аналогично документам Sinatra), я делаю что-то вроде этого:

enable :sessions

get '/foo' do
  session[:user_id] = 123
  session[:session_id] # "ABC", for example

  redirect to('/bar')
end

get '/bar' do
  # this is "DEF" when responding to Chrome (wrong), 
  # but "ABC" when responding to Firefox or Safari (right)
  session[:session_id]

  # this is nil when responding to Chrome (wrong),
  # but 123 when responding to Firefox or Safari (right)
  session[:user_id]
end

Я думаю, что это имеет отношение к тому, как разные браузеры реагируют на обработку сеанса после ответа на перенаправление. Кто-нибудь видел что-то подобное этому или какие-либо идеи о том, как разрешить это, продолжая использовать сеансы?

Спасибо заранее!

Ответ 1

Добавьте это в свой основной файл приложения:   используйте Rack:: Session:: Cookie,: key = > 'rack.session',                            : path = > '/',                            : secret = > 'some-random-string'

С добавлением вы сможете назначить сеанс ['whatever'] и работать как ожидалось.

Ответ 2

Попробуйте отключить все пользовательские расширения для файлов cookie, если они есть. После этого установите заголовки в Инструменты разработчика Сеть. Должен увидеть поле "Cookie:".

Ответ 3

Я думаю, что только потому, что вы не установили :session_secret, см. мой ответ на здесь

Ответ 4

Выполняя enable :sessions, вы просто получаете доступ к сеансу за запрос. Sinatra не имеет способа сохранить ссылку на предыдущий вызов (ваш перенаправление), поскольку он рассматривается как другой запрос.

Таким образом, длинный рассказ короткий:

set :session_secret, "SecureRandom.new(10) generated thing" enable :sessions

всегда используйте enable :sessions с секретом, иначе ваш сеанс воссоздается каждый раз, когда стойка видит запрос.