为什么Rails无法在Internet Explorer的Ajax请求中访问会话?

我在sessions_helper中有以下代码:

def current_user @current_user ||= User.find_by_remember_token(cookies[:remember_token]) end 

这让我从任何控制器调用current_user来获取当前用户。 (我从头开始使用类似于Railstutorial或Railscasts的身份validation)。

我有一个名为lookup_result ajax请求,它检查服务器以查看特定结果是否已准备就绪。

  $.get("/lookup_result?id="); 

它转到以下控制器方法:

 def lookup result user = current_user # do things with user... end 

这通常可以正常工作,但有时Rails无法获取current_user。 我怀疑问题是cookie或CSRF令牌在某些情况下无法通过ajax请求传递,但为什么它通常有效? 我如何修复它以便始终有效?

更新:
我不知道如何复制错误。 只有已登录的用户才能访问发送该请求的页面(尽管有人可以将ajax请求复制到另一个未登录的浏览器中)。 我用rollbar报告错误并保存请求数据。

当current_user失败时,这是user-agent的常用数据:

Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 5.1; InfoPath.1; …)

这意味着Internet Explorer通过Ajax发送会话信息存在一些问题。 有人知道怎么修这个东西吗?

下面你可以看到它返回的所有数据类别,尽管它对于任何包含“session”的内容都是空的。

时间戳
message.request_data.headers.Accept
message.request_data.headers.Accept编码
message.request_data.headers.Accept语言
message.request_data.headers.Cf-Connecting-Ip //(CF代表cloudflare)
message.request_data.headers.Cf-Ipcountry
message.request_data.headers.Cf雷
message.request_data.headers.Cf-游客
message.request_data.headers.Connection
message.request_data.headers.Host
message.request_data.headers.User代理
message.request_data.headers.Version
message.request_data.headers.X – 转发,对于
message.request_data.headers.X转发端口
message.request_data.headers.X转发 – 协议
message.request_data.headers.X请求开始
message.request_data.method
message.request_data.params …. //(显示各种参数)

message.request_data.session.defer //(所有这些会话项都是空的)
message.request_data.session.domain
message.request_data.session.expire_after
message.request_data.session.httponly
message.request_data.session.id
message.request_data.session.path
message.request_data.session.renew
message.request_data.session.secret
message.request_data.session.secure
message.request_data.url
message.request_data.user_ip
server.host

该错误从未包含有关帐户,IP地址或浏览器的任何信息。

如果用户为零,当然没有“帐户”:)

对于IP地址和用户代理,您应该使用request.env对象进行检查。 无论用户是否提供,请求信息仍然存在。

它似乎主要是Internet Explorer的一个问题。 根据StackOverflow上的其他答案,如果URL中有下划线,IE不擅长传递会话信息! 我要更改URL,看看是否有助于解决问题。 (虽然下划线不在域名中。)

Internet Explorer 9 AJAX请求中没有会话Cookie
Internet Explorer忽略某些域上的cookie(无法读取或设置cookie)

(更新:如果有帮助,不清楚。)