Sinatra没有坚持使用Chrome重定向会话

时间:2012-08-16 15:50:50

标签: ruby session google-chrome sinatra

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

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

提前致谢!

4 个答案:

答案 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密码,否则每次机架查看请求时都会重新创建会话。