不同基础域上的Rails应用程序和引擎可以共享会话吗



我有一个托管在domain.com上的Rails应用程序和一个安装在不同域上的引擎,使用路由配置:

Rails.application.routes.draw do
mount Some::Engine => '/', as: 'some', constraints: { domain: 'other_domain.com' }
end

有没有任何方法,无论如何破解,都可以访问两个域上的同一会话?

您的首要问题是会话基于cookie,并且您的浏览器在向其他domain.com发出请求时不会发送domain.com设置的cookie。

如果您切换到会话存储,其中会话cookie仅标识某个数据存储(例如memcached、redis等)中的一行,那么您只需要共享此会话id。

我自己没有做过,但我看到了以下内容的实现。

  1. 用户转到example.com,没有cookie,它们被重定向到master-domain.com
  2. Master-domain.com设置会话cookie(例如值为abc-123)并重定向到example.com/?session_id=abc-123
  3. example.com设置一个具有相同值的会话cookie(以避免在将来的请求中执行步骤1&2),并将针对abc-123的会话数据存储在某个数据存储中
  4. 稍后,用户转到other-domain.com,没有cookie。与1中一样,它们被重定向
  5. 主域读取其现有会话cookie(值为abc-123)并重定向到other-domain.com/?session_id=abc-123
  6. Other-domain.com重复从3开始的步骤

现在,您的所有域都在同一数据存储中存储具有相同会话id的会话数据:您正在共享会话

我倾向于说,如果你真的需要分享会话信息(而不仅仅是身份),那么你可能会给自己带来问题,但你确实说过你对任何事情都持开放态度。

相关内容

  • 没有找到相关文章

最新更新