我有一个Padrino应用程序。我想在实例(负载平衡的机器)之间共享会话。
我设置了自己的秘密,但是我不知道要设置其他什么来使其在会话共享中起作用。我在cookie中看到domain,这是机器的主机名。我尝试设置为
set :sessions, :domain => 'mydomain.org'
但是它不起作用,但是有必要吗?请设置我必须设置的共享应用程序实例之间的会话。
感谢所有人
答案 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应用程序之间我没有错误。