2016-03-29 7 views
1

Rails 4.2アプリケーションでは、モジュールのアプリケーションコントローラ内のメソッドview_handlernilsessionの変数を取得しています。ここでは、コードの構造は次のとおりです。セッションがアプリケーションコントローラ内でnilになる

class my_module < ApplicationController 
    def view_handler 
    #access session[:page_step] which is defined in controller. 
    end 
end 

デフォルトのCookieストアは、セッションのために使用されます。

Rails.application.config.session_store :cookie_store, key: '_my_app_session' 

我々はview_handlerをメインに移動したときに問題が同じであるため、これはscope問題ではないことを確認しアプリのapplication controllerapplication controllerとデバッグにおいて

sessionオブジェクトはnil値とが、存在する:ここ

>session.present? #false 
>session.nil? #true 
>session[:page_step] #nil 

デバッグ中session目的です。アプリ定義されたセッション変数を保持している@Delegateは空です:デバッグでも

enter image description here

session[:page_step]再表面再び後半controllerアクションインチ何らかの形でsession[:page_step](および他のセッション変数)は、application controllernilcontrollerに再サーフェスになります。 application controllerのデフォルトではsession variablesRAILSで利用可能であるため、application controllerでは何がゼロになる可能性がありますか?

+1

おそらく【このSO質問](http://stackoverflow.com/a/30791578/1544012)関連していますか? – BoraMa

+0

私たちのケースでは、かなりの数のセッション変数が作成され、 'session'に格納されています。同じ問題ではありません。 – user938363

+1

おそらくCSRFの問題です:http://stackoverflow.com/a/18576525/1483788を参照してください。 –

答えて

2

CSRF Issueが発生している可能性があります。

セキュリティトークンが期待されていたものと一致しない場合、セッションは、CSRFの問題であるかどうかを確認するには

をリセットされます、あなたは一時的にあなたのApplicationControllerに

protect_from_forgeryラインを無効にすることができます

さらに、Session Storageの構成が、実稼働環境ではなく、実動環境変数としての秘密鍵config/secrets.ymlで完了していることを確認してください。

$ rake secret 
82d58d3dfb91238b495a311eb8539edf5064784f1d58994679db8363ec241c745bef0b446bfe44d66cbf91a2f4e497d8f6b1ef1656e3f405b0d263a9617ac75e 

新しい秘密鍵が使用されるたびに、他のキーを使用して、古いセッションは検証しないであろうと、セッションの結果はゼロになります。

秘密鍵は、コンソールに次のようにして生成することができます。直接生成されたファイルconfig/secrets.yml(レール4.2)から

コメント:

# Be sure to restart your server when you modify this file. 

# Your secret key is used for verifying the integrity of signed cookies. 
# If you change this key, all old signed cookies will become invalid! 

# Make sure the secret is at least 30 characters and all random, 
# no regular words or you'll be exposed to dictionary attacks. 
# You can use `rake secret` to generate a secure secret key. 

# Make sure the secrets in this file are kept private 
# if you're sharing your code publicly. 
+0

Railsアプリケーションで 'protect_from_forgery with::exception'を削除しました。サーバを再起動してもセッションの問題は残ります。開発、テスト、生産のためのsecret_key_baseがあります。何がリセットセッションを引き起こす可能性がありますか? – user938363

+0

この問題を再現するために、すべての主要なブラウザを試しましたか?クリーンインストール(拡張機能またはアドオンなし)は最適です。 –

+0

FirefoxとIEには同じ問題があります。コードは長い間使用されており、何が問題の原因かは不明です。 – user938363

関連する問題