Ajax Rails呈现JSON-会话丢失?

Ajax Rails呈现JSON-会话丢失?,ajax,json,session,cookies,Ajax,Json,Session,Cookies,我试图对一个用JSON响应的控制器进行一些Ajax调用 if session[:user] render :json => "Some Data" else render :json => "You are not logged in" end 首次由授权用户调用此操作时,一切正常,会话[:user]为!=无。 它第二次被调用时是nil 所以我一做render:json,rails似乎就失去了它的会话。我发现在第一次调用中,rails会用一个新的cookie覆盖*\u会话。

我试图对一个用JSON响应的控制器进行一些Ajax调用

if session[:user]
  render :json => "Some Data"
else
  render :json => "You are not logged in"
end
首次由授权用户调用此操作时,一切正常,
会话[:user]
!=无
。 它第二次被调用时是
nil

所以我一做
render:json
,rails似乎就失去了它的会话。我发现在第一次调用中,rails会用一个新的cookie覆盖
*\u会话。因此,rails不知道初始的、经过授权的会话

如果我不将响应呈现为JSON,那么一切正常


如何强制rails在JSON呈现的页面中设置与普通视图相同的sessionid?

经过六天的搜索,我终于做到了:

由于缺少
X-CSRF-Token
头,rails似乎破坏了会话。现在,我正在JQuery的
ajaxSend
钩子中添加此标题:

$(document).ajaxSend(function(e, xhr, options) {
  var sid = $("meta[name='csrf-token']").attr("content");
  xhr.setRequestHeader("X-CSRF-Token", sid);
});

它现在正在按预期工作。

我把它放在beforeSend方法中:

function goAjax(urlAddress,dataObject,successFunction,errorFunction){
        $.ajax({
              type: "POST",
              url: urlAddress,
              beforeSend: function ( xhr ) {
                    xhr.setRequestHeader("X-CSRF-Token", $('meta[name=csrf-token]').attr('content'));
              },
              dataType: "json",
              contentType: "application/json; charset=utf-8",
              processData: false,
              data: JSON.stringify(dataObject),
              context: document.body,
              success: function(data,status){ successFunction(data,status);},
              error: function(data,status){ errorFunction()}
        });
    }

如果您不需要使用其他方式的ajax请求(这样您应该在发送到所有ajax请求之前添加),则效果非常好。

尝试了多个关于此的教程-仍然是相同的问题