在ajax调用期间不保存Rails会话

时间:2012-09-22 15:52:05

标签: ruby-on-rails ajax session jquery session-cookies

完成具体操作后我有这个ajax调用

  $.ajax({
              type: "POST",
              url: $("#myform").prop('action'),
              data: $("#myform").serialize(),
              xhrFields: {withCredentials: true},
              beforeSend: function(xhr) {
                xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').last().attr('content'));
              }
          });

这个ajax调用引用了create action,所以我想在我之前创建的会话中保存表单的params。所以我把它放在创造行动

 def create
      session[:my_session].deep_merge!(params[:user])
      puts session[:my_session]

我打印会话以确保服务器上包含正确的参数,是的,它已经打印了正确的值。

{"profile_id"=>"1000", "first_name"=>"john", "last_name"=>"vieira", "email"=> "john@sandsora.com"} 

这里的问题是在该调用之后,会话不保存我存储的数据!这意味着它在此分配之前存储了最新数据。我搜索了那个错误,我得知它可能是CSRF令牌错误,我通过添加beforeSend函数修复了它,但我仍然遇到同样的问题,所以有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我的第一个猜测是没有设置会话cookie标头。没有这个cookie,rails无法设置正确的会话,并且在请求完成后您的数据“丢失”。您的浏览器应该在您的ajax请求中自动发送它...

您是否可以验证会话cookie是否与您的ajax请求一起发送?