【问题标题】:Maintaining Cookies when switching EC2 instances Ruby on Rails切换 EC2 实例时维护 Cookie Ruby on Rails
【发布时间】:2013-04-19 11:46:20
【问题描述】:

我的团队即将对我们的系统进行大规模改革,并准备进行重大转变。

目前,我们使用弹性 IP 在 AWS 上托管。我们的堆栈是 Ruby on Rails,我们正在使用 capistrano。我们还有一个黑莓应用程序和一个 iPhone 应用程序,并在客户手中。应用程序和服务器之间的身份验证是通过 cookie 而不是任何类型的身份验证密钥。

我很清楚这不是进行身份验证的最佳方式,但遗留代码就是遗留代码。

由于我们公司和服务的性质,当我们切换时,用户不会被注销,并且会话通过 cookie 从移动应用程序传递到服务器是很重要的。

我尝试了以下方法:

将 DNS 指向不同的 IP。 将弹性 IP 指向不同的 AWS 实例。

在每种情况下,cookie 似乎都没有被兑现。

我是一名开发人员,而不是系统管理员,我已经没有什么想法了。无论如何,是否可以使用 Devise on Rails 或通过 AWS 制作新的实例来尊重 cookie?还是我应该考虑的其他选择?

【问题讨论】:

  • 您是否在此切换期间更改域?
  • 你解决了吗?

标签: ruby-on-rails cookies amazon-web-services amazon-ec2 capistrano


【解决方案1】:

HTTP Cookie 不包含有关服务 IP 地址的任何信息。它们与域名(或子域的根)和路径相关联。因此,只要域保持不变,您就可以随意更改服务 IP 地址。在您的情况下,两种解决方案都有效 - 您可以迁移 IP 地址或仅更改 DNS 记录的 IP 值。这应该足以让用户保持登录状态。

重要的提醒问题是 - 您将会话数据保存在哪里?你在 Rails 中使用什么会话存储?您可能没有将会话数据迁移到您的测试环境,因此客户端已注销。

Rails 的默认会话存储是 cookie 存储(会话数据保存在客户端),因此只要您在应用程序中的 secret_token 保持不变,它就应该在您的情况下“正常工作”。也许这是在部署期间重新生成的?可能值得一试 (config/initializers/secret_token.rb) 此令牌用于对 cookie 进行签名,以确保客户端没有更改它们。

确保所有这些点在您的案例中都是有效的,并仔细检查您的测试过程,因为它应该可以正常工作而无需任何额外的操作。

【讨论】:

  • 秘密令牌是一样的。我很确定会话也已迁移,但我会仔细检查。如果有效,我会通知您。
  • 在您的浏览器中检查会话 cookie 的值是什么(它只是 base64 编码的纯文本)。这可能会产生一些额外的线索。
猜你喜欢
  • 2011-01-17
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
相关资源
最近更新 更多