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 

我认为这与重定向响应后不同浏览器如何响应处理会话有关。 有没有人看过类似的东西,或者对如何在使用会话时解决这个问题有任何想法?

提前致谢!

将其添加到您的主应用程序文件:使用Rack :: Session :: Cookie,:key =>’rack.session’,: path =>’/’,:secret =>’some-random-string’

添加后,您应该能够分配会话[‘what’]并使其按预期工作。

如果有的话,请尝试禁用所有自定义Cookie管理扩展程序。 之后,在Developer toolsNetwork中检查标题。 应该看’Cookie:’字段。

我想那只是因为你没有设置:session_secret ,请参考我的答案

通过enable :sessions您只需访问每个请求的会话。 Sinatra无法保留对前一个调用(您的重定向)的引用,因为它被视为另一个请求。

因此,长话短说:

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

始终使用enable :sessions具有机密的会话,否则每次机架查看请求时都会重新创建会话。