Rails Cookie设置问题

时间:2008-10-22 22:44:58

标签: ruby-on-rails ruby cookies

我有一个Rails应用程序设置一个cookie,并在用户登录后重定向到另一个服务器。但是,Rails应用程序设置的cookie由于某种原因未被服务器看到。我已经尝试将http_only设置为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中手动创建一个带有Web Developer extension的cookie,它可以正常工作,但不会在Rails执行时。有什么想法吗?

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:1)

  

我仍然无法看到cookie,除非该域名与我的Rails应用程序相同。

这就是cookie应该如何工作。如果您通过IP直接访问它,那么就Web浏览器而言,您的“域”只是您的IP,因此适用相同的规则。

答案 2 :(得分:0)

您可以通过编辑/ 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。