0

我在服务器端导轨和前端仅使用 html 并通过 ajax 从 html 页面访问 ruby​​ 控制器。

我的html文件部署在tomcat上,我正在做跨域ajax请求

我在浏览器中的响应具有包含所有详细信息的完整标题。仍然没有在浏览器中设置 cookie。

Access-Control-Allow-Credentials:true
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin:  localhost:8080  
Access-Control-Max-Age:1728000 
Cache-Control:max-age=0, private, must-revalidate 
Connection:close  
Content-Type:application/json; charset=utf-8
ETag:"08499f242d03267cf0777a855aacf33e" 
Server:thin 1.6.2 codename Doc Brown
Set-Cookie:request_method=POST; path=/
Set-Cookie:remember_token=oKk0zsjd4BpyXC_39k0rUA; path=/; expires=Wed, 26 Jul 2034 15:05:51 -0000
Vary:Origin
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Request-Id:111f78ff-0dc8-4926-b301-a7e58f655619
X-Runtime:0.280800
X-UA-Compatible:chrome=1
X-XSS-Protection:1; mode=block

如果有人知道这种情况,请建议我..

提前致谢

4

1 回答 1

1

你有一个有趣的设置。我想知道是什么阻止您将整个站点托管在 rails 实例之上。您的用户需要启用一些默认关闭的浏览器安全设置。如果我使用该网站,这会让我感到不舒服。尽管如此,听起来您已经在 Rails 应用程序上启用了 CORS。我假设您至少使用 jQuery 1.5+。您在 ajax 调用中需要的两个设置是crossDomain: truexhrFields : { withCredentials : true }。你的 ajax 应该是这样的:

$.ajax({
  'url' : 'your_cross_domain_url',
  'data' : {},
  'type' : 'POST',
  'crossDomain : true,
  'xhrFields' : {
    'withCredentials' : true
  },
  success: function(data){
    //do stuff
  },
  error: function(data) {
    // do other stuff
  }
});

此外,您的用户可能需要启用此设置:

Chrome > 设置 > 高级设置 > 隐私 > 内容设置 > 阻止第三方 cookie 和站点数据

Safari > 首选项 > 隐私 > 阻止 cookie 和其他网站数据 > 从不

其他浏览器 > 不确定

于 2014-07-26T20:34:31.953 回答