Sinatra(rack.session)会话身份验证

时间:2018-12-06 11:15:21

标签: ruby sinatra rack padrino

我有一个Padrino应用程序。我想在实例(负载平衡的机器)之间共享会话。

我设置了自己的秘密,但是我不知道要设置其他什么来使其在会话共享中起作用。我在cookie中看到domain,这是机器的主机名。我尝试设置为

set :sessions, :domain => 'mydomain.org'

但是它不起作用,但是有必要吗?请设置我必须设置的共享应用程序实例之间的会话。

感谢所有人

2 个答案:

答案 0 :(得分:0)

一种方法是将Cookie信息放入每次Sinatra运行该应用程序的新实例时都会运行的环境变量中,例如

require 'securerandom'
require 'encrypted_cookie'

COOKIE_SETTINGS = {
  :path => "/",
  :expire_after => 86400 * 60, # In seconds, 60 days
  :secret => ENV["SESSION_SECRET"] || SecureRandom.hex(64),
  :httponly => true
}

configure do
  cookie_settings = COOKIE_SETTINGS
  cookie_settings.merge!( :secure => true ) if settings.production?
  use Rack::Session::EncryptedCookie, cookie_settings
end

答案 1 :(得分:0)

您是否要在两个不同的应用程序之间共享?您的问题有点不清楚。

两个完全不同的应用程序之间的共享会话是一个安全问题。

这是我认为您的问题可能的解决方案。

  use Rack::Session::Cookie, :key => 'my_app_key',
                             :path => '/',
                             :expire_after => 14400, # In seconds
                             :secret => 'secret_stuff'

您看到与上面的区别吗? -没有域,如果我让Rack :: Session :: Cookie指定域或浏览器(无论是谁),则在多个Sinatra / Rack应用程序之间我没有错误。