Sinatra没有通过重定向Chrome来保持我的会话。它创建了一个全新的会话,我丢失了以前的所有会话数据。
作为一个例子(类似于the Sinatra docs),我正在做这样的事情:
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
我认为这与重定向响应后不同浏览器如何响应处理会话有关。有没有人看过类似的东西,或者对如何在使用会话时解决这个问题有任何想法?
提前致谢!
答案 0 :(得分:1)
将此添加到您的主应用文件: 使用Rack :: Session :: Cookie,:key => 'rack.session', :path => '/', :secret => “一些随机字符串”
添加后,您应该能够分配会话['what']并使其按预期工作。
答案 1 :(得分:0)
请尝试禁用所有自定义Cookie管理扩展程序是Chrome(如果有)。 之后,检查开发人员工具→网络中的标题。应该看'Cookie:'字段。
答案 2 :(得分:0)
我认为仅仅因为您没有设置:session_secret
,请参阅here上的答案
答案 3 :(得分:0)
通过执行enable :sessions
,您只需访问每个请求的会话。
Sinatra无法保留对前一个调用(您的重定向)的引用,因为它被视为另一个请求。
因此,长话短说:
set :session_secret, "SecureRandom.new(10) generated thing"
enable :sessions
始终使用enable :sessions
密码,否则每次机架查看请求时都会重新创建会话。