Ruby on rails Rails Cookie设置问题

Ruby on rails Rails Cookie设置问题,ruby-on-rails,ruby,cookies,Ruby On Rails,Ruby,Cookies,我有一个Rails应用程序,它设置cookie,并在用户登录后重定向到另一台服务器。但是,由于某些原因,Rails应用程序设置的cookie不会被服务器看到。我已经尝试将http_设置为false,但我仍然无法看到cookie,除非域与我的Rails应用程序相同。下面是我用来设置cookie的代码: cookies[:dev_appserver_login] = { :value => "#{email}:#{nick}:#{admin}:#{hsh}", :domain =

我有一个Rails应用程序,它设置cookie,并在用户登录后重定向到另一台服务器。但是,由于某些原因,Rails应用程序设置的cookie不会被服务器看到。我已经尝试将http_设置为false,但我仍然无法看到cookie,除非域与我的Rails应用程序相同。下面是我用来设置cookie的代码:

cookies[:dev_appserver_login] = 
  { :value => "#{email}:#{nick}:#{admin}:#{hsh}",
    :domain => "webserver-to-redirect-to",
    :expires => 30.days.from_now }

redirect_to session[:dest_url]

若我在Firefox中手动创建cookie,它可以正常工作,但当Rails这样做时就不行了。有什么想法吗?

什么是重定向和重定向到服务器?您只能将“域”设置为当前主机名或父域,因此,如果您在a.example.com上并且要重定向到b.example.com,则必须将“域”设置为.example.com,而不是代码段中暗示的b.example.com

(像.com TLD这样的开放域本身不允许作为域值,因此,如果您想将cookie从a.example.com传递到b.somewherese.com,您需要一个更复杂的解决方案,可能需要更改somewheres.com上的代码。)

我甚至无法看到cookie,除非域与我的Rails应用程序相同


这就是饼干的工作原理。如果您是通过IP直接访问它,那么就web浏览器而言,您的“域”就是您的IP,因此同样的规则适用。

您可以在开发模式下编辑/etc/hosts文件并为应用程序创建主机名来解决此问题

127.0.0.1 app1.localdev.com、app2.localdev.com

然后,在创建cookie时,将域设置为“.localdev.com”(注意前面的句点),这将允许localdev.com的任何子域中的任何应用程序读取它


另一个更广泛的解决方案(这对生产部署更好,但需要进行更多的设置)是为子应用程序设置路径代理,以便将对appdomain.com的请求转到app1,并将对appdomain.com/other-app/的请求代理到另一个应用程序。这使他们能够共享根域并轻松共享cookie

啊,我的服务器没有FQDN,所以它们只是两个IP。如果它们在同一子网中,我可以使用一些特殊的技巧吗?不,对不起,父域匹配规则只适用于解析的地址,因此您必须给它们一些名称才能成功。