【问题标题】:Why does Rails Fail to access the Session in an Ajax request from Internet Explorer?为什么 Rails 无法从 Internet Explorer 访问 Ajax 请求中的 Session?
【发布时间】:2013-11-26 12:50:20
【问题描述】:

我的 session_helper 中有以下代码:

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

这让我从任何控制器调用 current_user 来获取当前用户。 (我正在使用类似于Railstutorial'sRailscasts 的身份验证)。

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

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

它转到以下控制器方法:

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

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

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

这是当前用户失败时用户代理的常用数据:

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

这意味着 Internet Explorer 通过 Ajax 发送会话信息存在一些问题。有谁知道如何解决这个问题?

您可以在下面看到它返回的所有数据类别,尽管其中包含“会话”的任何内容都是空的。

时间戳
message.request_data.headers.Accept
message.request_data.headers.Accept-Encoding
message.request_data.headers.Accept-Language
message.request_data.headers.Cf-Connecting-Ip //(CF代表cloudflare)
message.request_data.headers.Cf-Ipcountry
message.request_data.headers.Cf-Ray
message.request_data.headers.Cf-Visitor
message.request_data.headers.Connection
message.request_data.headers.Host
message.request_data.headers.User-Agent
message.request_data.headers.Version
message.request_data.headers.X-Forwarded-For
message.request_data.headers.X-Forwarded-Port
message.request_data.headers.X-Forwarded-Proto
message.request_data.headers.X-Request-Start
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
服务器.host

【问题讨论】:

  • 请指定失败时间。你发出了什么请求?
  • @BillyChan,不确定您的意思,但我添加了更新。 current_user 无法返回实际用户。

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


【解决方案1】:

该错误永远不会包含有关帐户、IP 地址或浏览器的任何信息。

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

对于 IP 地址和用户代理,您应该使用 request.env 对象检查它。无论用户是否出现,请求信息都还在。

【讨论】:

  • 我在 Rollbar 中添加了一些信息以查看请求信息。我现在看到一些来自中国的错误,但我仍然不知道原因..
【解决方案2】:

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

No Session Cookies on Internet Explorer 9 AJAX requests
Internet Explorer ignores cookies on some domains (cannot read or set cookies)

(更新:不清楚是否有帮助。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多