Ответ 1
Добавьте это в свой основной файл приложения: используйте Rack:: Session:: Cookie,: key = > 'rack.session', : path = > '/', : secret = > 'some-random-string'
С добавлением вы сможете назначить сеанс ['whatever'] и работать как ожидалось.
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
Я думаю, что это имеет отношение к тому, как разные браузеры реагируют на обработку сеанса после ответа на перенаправление. Кто-нибудь видел что-то подобное этому или какие-либо идеи о том, как разрешить это, продолжая использовать сеансы?
Спасибо заранее!
Добавьте это в свой основной файл приложения: используйте Rack:: Session:: Cookie,: key = > 'rack.session', : path = > '/', : secret = > 'some-random-string'
С добавлением вы сможете назначить сеанс ['whatever'] и работать как ожидалось.
Попробуйте отключить все пользовательские расширения для файлов cookie, если они есть. После этого установите заголовки в Инструменты разработчика → Сеть. Должен увидеть поле "Cookie:".
Я думаю, что только потому, что вы не установили :session_secret
, см. мой ответ на здесь
Выполняя enable :sessions
, вы просто получаете доступ к сеансу за запрос.
Sinatra не имеет способа сохранить ссылку на предыдущий вызов (ваш перенаправление), поскольку он рассматривается как другой запрос.
Таким образом, длинный рассказ короткий:
set :session_secret, "SecureRandom.new(10) generated thing"
enable :sessions
всегда используйте enable :sessions
с секретом, иначе ваш сеанс воссоздается каждый раз, когда стойка видит запрос.