5

2.3.2にアップグレードした2.2.3アプリがあります

これは、すべてのサイトに対して 1 つのトップ レベル セッションを作成するマルチサイト (サブドメインを使用) です。

これは、production.rb でドメインを変更する方法です。

ActionController::Base.session_options[:domain] = "example.com"

# in rails 2.2.2, this is what i used to do:
# ActionController::Base.session_options[:session_domain] = "example.com" 

アップグレード後に奇妙なことが起こり始めました。安静認証を使用してログインできなくなりました。それは私を認証しますが、リダイレクトされるとすぐに、再度ログインするように求められます.

私が言ったように、私は restful_authentication を使用し、パッセンジャー 2.1.2 も使用します。誰でも助けることができますか?

4

10 に答える 10

7

オリーの答えは正しいです。Rails2.3では次のようになります。

config.action_controller.session[:domain] = '.example.com'

まだいくつかのセッションオプションを作成していない場合は、それを使用するとこれを受け取る可能性があることを追加したいと思います。

undefined method `[]=' for nil:NilClass

その場合、代わりにこれを使用する必要があります(これにより、セッション変数を更新する代わりに作成します)。

config.action_controller.session ||= {}
config.action_controller.session[:domain] = '.example.com'

編集:どうやらRails2.2.2プロジェクトは別のものを使用しています。「domain」には「session_domain」という名前を付け、ドメインの先頭からピリオド文字を削除する必要があります。これを試して:

config.action_controller.session ||= {}
config.action_controller.session[:session_domain] = 'example.com'
于 2009-06-11T00:06:10.823 に答える
3

Rails 2.3では、次を使用する必要があります

config.action_controller.session[:domain] = '.example.com'
于 2009-05-20T13:03:36.210 に答える
2

より防弾の解決策は、セッションがすでに存在するかどうかを確認することです。セッションオブジェクト全体をやみくもに置き換えると、将来的につまずく可能性があります。

if ActionController::Base.session
  ActionController::Base.session[:domain] = '.example.com'
else
  ActionController::Base.session = { :domain => '.example.com' }
end

私はこれをイニシャライザファイルで行うのが好きです。

于 2010-04-25T19:01:57.163 に答える
1

次のことを示す必要があります。

.example.com

(先頭のドットに注意してください) セッション Cookieが example.comとそのサブドメインに適用されるようにします。

于 2009-03-25T21:07:10.747 に答える
1

Cookie のサブドメイン全体を処理する別の方法は動的であることに言及したかっただけです。2.3.4 で動作します。

environment.rb のこのようなもの

# solution to use the cookies in the api. domains
# this is relevant but in 2.3.4 the code is different
# http://szeryf.wordpress.com/2008/01/21/cookie-handling-in-multi-domain-applications-in-ruby-on-rails/
# Just making sure that api. shares the domain name
require 'dispatcher'
module ActionController
  class Dispatcher
    def set_session_domain
      host_name = @env['SERVER_NAME']
      new_host_name = whatever #some mod of the host_name, for instance
      ActionController::Base.session = {
        :domain => new_host_name
      }
    end

    before_dispatch :set_session_domain
  end
end
于 2009-12-14T17:33:49.287 に答える
0

私も2.3.5を実行していて、@alfred-nerstuと同様の問題が発生しています。

@schickmからのパッチでエラーメッセージは表示されませんが、それもかかっていないようです。

于 2010-12-23T17:20:14.797 に答える
0

nginx + thin を使用して、同じ問題 (サブドメインなしでセッションを失う) がありました。Apache + Passenger (最新バージョン) に移行すると、問題が修正されました。

于 2009-04-20T20:32:15.620 に答える
0

セッションキーとシークレットを設定したのと同じ場所に追加できます

config.action_controller.session = {
      :key => '_app_session',
      :domain => '.domain.com',
      :secret => 'secret'
}
于 2012-10-11T07:34:58.977 に答える
-1

Cookie ベースのセッションでも同じ問題がありました。Passenger 2.1.3 にアップグレードすると、問題が解決したようです。

于 2009-04-08T12:05:13.847 に答える