【问题标题】:Sinatra (rack.session) session authSinatra (rack.session) 会话验证
【发布时间】:2019-05-08 01:54:03
【问题描述】:

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

我设置了自己的秘密,但我不知道还要设置什么才能让它用于会话共享。我在 cookie 中看到域,机器的主机名在哪里。我试着设置它

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

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

谢谢大家

【问题讨论】:

    标签: ruby sinatra rack padrino


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      一种方法是将 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
      

      【讨论】:

        猜你喜欢
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-12-09
        • 2015-02-20
        • 2013-12-13
        • 2015-05-24
        • 2013-06-22
        • 2012-01-20
        相关资源
        最近更新 更多