【发布时间】:2019-05-08 01:54:03
【问题描述】:
我有一个 Padrino 应用程序。我想在实例(负载平衡的机器)之间共享会话。
我设置了自己的秘密,但我不知道还要设置什么才能让它用于会话共享。我在 cookie 中看到域,机器的主机名在哪里。我试着设置它
set :sessions, :domain => 'mydomain.org'
但它不起作用,但有必要吗?请,我必须设置什么才能在应用程序实例之间共享会话。
谢谢大家
【问题讨论】:
我有一个 Padrino 应用程序。我想在实例(负载平衡的机器)之间共享会话。
我设置了自己的秘密,但我不知道还要设置什么才能让它用于会话共享。我在 cookie 中看到域,机器的主机名在哪里。我试着设置它
set :sessions, :domain => 'mydomain.org'
但它不起作用,但有必要吗?请,我必须设置什么才能在应用程序实例之间共享会话。
谢谢大家
【问题讨论】:
您是否尝试在两个不同的应用程序之间共享?你的问题有点不清楚。
在两个完全不同的应用程序之间共享会话是一个安全问题。
这是我认为您的问题的可能解决方案。
use Rack::Session::Cookie, :key => 'my_app_key',
:path => '/',
:expire_after => 14400, # In seconds
:secret => 'secret_stuff'
你看到上面的区别了吗? - 没有域,如果我让 Rack::Session::Cookie 指定域或浏览器(不管是谁做的),我在多个 Sinatra/Rack 应用程序之间没有错误。
【讨论】:
一种方法是将 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
【讨论】: