无法从控制器在浏览器中存储cookie

时间:2014-07-26 15:18:37

标签: ruby-on-rails ajax cookies tomcat8

我在服务器侧导轨和前端只使用html 并从html页面通过ajax访问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

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

提前致谢

1 个答案:

答案 0 :(得分: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和其他网站数据>从未

其他浏览器>不确定