为什么Rails的无法访问会话中从Internet Explorer一个Ajax请求?无法访问、Rails、Internet、Ajax

2023-09-10 19:19:13 作者:零栀

我在我的sessions_helper以下code:

 高清CURRENT_USER
   @current_user || = User.find_by_remember_token(饼干[:remember_token])
 结束
 

这让我们从任何控制器我叫CURRENT_USER获取当前用户。 (我使用的是从零开始类似 Railstutorial的或 Railscasts )。

我有Ajax请求名为 lookup_result ,检查服务器,以查看是否有具体的结果已就绪。

  $。获得(/ lookup_result ID =<%= ID%>中);
 

它去下面的控制器方法:

 高清查找结果
  用户= CURRENT_USER
  #做事用户...
结束
 
InternetExploret为什么有时会停止工作

这通常工作正常,但有时Rails的失败,以获得CURRENT_USER。我怀疑的问题是,Cookie或CSRF令牌失败,通过在一些场合Ajax请求获得通过,但为什么它通常工作?如何解决它,所以它始终工作?

更新: 我不知道如何复制错误。只有登录的用户都能够访问发送一个请求(尽管有人可以复制Ajax请求到未签署其他浏览器)的页面。我举报翻车错误并保存请求数据。

这是对用户代理通常的数据时,CURRENT_USER失败:

  

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

这意味着有一些问题与Internet Explorer发送过阿贾克斯的会话信息。任何人都知道如何解决这个问题?

下面你可以看到所有的数据类别返回,但它是空与会话的任何东西。

  

时间戳   message.request_data.headers.Accept   message.request_data.headers.Accept-编码   message.request_data.headers.Accept语言   message.request_data.headers.Cf-连接-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

解决方案

这似乎主要是与Internet Explorer的一个问题。据计算器上其他的答案,IE并不擅长传球会议上的信息,如果该URL有下划线的吧!我要改变网址,看看有没有什么帮助解决问题。 (虽然下划线不在域名。)

No会话Cookie在Internet Explorer 9 AJAX请求 Internet资源管理器会忽略一些领域饼干(无法读取或设置Cookie)

(更新:尚不清楚,如果这有助于)

I have the following code in my sessions_helper:

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

This let's me call current_user from any controller to get the current User. (I'm using authentication from scratch similar to Railstutorial's or Railscasts).

I have ajax request called lookup_result that checks the server to see if a specific result is ready.

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

It goes to the following controller method:

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

This usually works fine, but sometimes Rails fails to get the current_user. I suspect the problem is that the cookies or CSRF token fail to get passed through the ajax request on some occasions, but why does it usually work? How do I fix it so it always works?

Update: I don't know how to replicate the error. Only signed-in users are able to access the page that sends that request (though someone could copy the ajax request into another browser that isn't signed in). I report the error with rollbar and save the request data.

This is the usual data for user-agent when current_user fails:

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

This implies there's some issue with Internet Explorer sending the session info over Ajax. Anyone know how to fix this?

Below you can see all the data categories it returns, though it's empty for anything with "session" in it.

Timestamp 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 stands for 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.... //(various parameters are displayed) ... message.request_data.session.defer //(all these session items are empty) 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

解决方案

It seems to be mainly a problem with Internet Explorer. According to other answers on StackOverflow, IE isn't good at passing session info if the URL has underscores in it! I'm going to change the URLs and see if that helps solve the problem. (Though the underscore was not in the domain name.)

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

(Update: Not clear if that helped.)