我正在尝试在会话变量中设置一个简单的布尔值。该值通过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();
并获得相同的结果。