Rails会话变量:开发和生产的不同行为

时间:2013-12-27 16:13:21

标签: ruby-on-rails-3 session-variables production-environment

我正在尝试在会话变量中设置一个简单的布尔值。该值通过javascript:

复选框设置

查看:

<script>
  function set_session_var_my_value()
  {
    if(document.getElementById('my_value').checked){
      $.get('/set_session_var?my_value=true');
    }
    else{
      $.get('/set_session_var?my_value=false');
    }
  }
</script> 
...
<li> <a class="checkbox">My Var<%= check_box_tag('my_value', '1', (session[:my_value]=='true'), :onclick => 'set_session_var_my_value();') %></a></li>
...

路线:

get "/set_session_var", :to=>"user_session_vars#my_value"

控制器:

class UserSessionVarsController < ApplicationController
  def my_value
    session[:my_value] = params[:my_value]
    render :json => {"response" => "OK"}
  end
end

我正在使用设计进行身份验证。在应用程序控制器中,登录后我将变量设置为false作为默认值:

class ApplicationController < ActionController::Base
  protect_from_forgery
  ...
  protected
    def after_sign_in_path_for(resource)
      session[:my_value] = false
      root_path
    end

end

在开发中运行时,变量正在设置中,我可以在其他视图中查看和使用其值,但在生产中它不起作用。我正在使用Apache与Phusion Passenger。我试过评论一下protect_from_forgery,但它仍然不起作用。

2014年1月6日更新

我发现当我在浏览器中清除缓存(ctrl + shift + supr)时,ajax请求适用于两个请求调用,然后session[:my_value]被设置为下一次调用中的最后一个值。我尝试在ajax调用中调用window.applicationCache.update();并获得相同的结果。

0 个答案:

没有答案