3

我有一个 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 扩展手动创建一个 cookie,它可以正常工作,但当 Rails 这样做时就不行。有任何想法吗?

4

3 回答 3

9

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

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

于 2008-10-22T23:10:37.780 回答
1

除非域与我的 Rails 应用程序相同,否则我什至看不到 cookie。

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

于 2008-10-23T00:50:41.683 回答
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。

于 2014-07-09T20:37:00.920 回答