ajax - Rails 渲染 JSON - session 丢失?

标签 ajax json session cookies

我正在尝试对响应 JSON 的 Controller 进行一些 Ajax 调用。

if session[:user]
  render :json => "Some Data"
else
  render :json => "You are not logged in"
end

第一次由经过身份验证的用户调用此操作时,一切正常,session[:user]!= nil .
第二次调用它是nil !

因此,我一做 render :json,似乎 Rails 就失去了它的 session 。 .我发现在第一个调用 rails 中覆盖了 *_session - 一个新的 cookies 。因此,rails 不知道初始的、经过身份验证的 session 。

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

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

最佳答案

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

似乎 rails 会因为缺少 X-CSRF-Token 而破坏 session 标题。我现在在 ajaxSend 中添加此 header jQuery的钩子(Hook):

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

它现在按预期工作。

关于ajax - Rails 渲染 JSON - session 丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511695/

相关文章:

java - java中如何维护session

node.js - 简单的 Expressjs 应用程序没有响应

javascript - 如何获取DELETE请求参数

java - Jackson:反序列化 ArrayList 不起作用?

javascript - 如果已经触发,则仅触发 Jquery ajax 一次

java - 用java将json序列化为rdf

php - 为什么 json_encode() 返回键值两次(索引键和字符串键)?

java - 如何检查现有 session 是否无效?

android - Cordova AJAX 调用仅在发布版本时失败

javascript - jquery(a)同步请求等待