我有一个生产环境和一个暂存环境。我想知道我是否可以在环境之间沙箱cookie。我的设置看起来像
生产
- domain.com-前端SPA
- api.domain.com-后端节点
暂存
- staging.domain.com-前端SPA
- api.staging.domain.com-后端节点
我的暂存cookie使用域.staging.domain.com
,所以那里一切都很好。但是我的生产cookie使用域.domain.com
,所以这些cookie会显示在暂存环境中。
我读过一个可能的解决方案是使用一个单独的域进行暂存,比如staging-domain.com,但如果可能的话,我希望避免这种情况。是否有其他解决方案,或者我是否遗漏了cookie的工作原理?
有多种选择:
- 将您的生产域设置为www.domain.com和api.www.domain.com,并将您的cookie设置为。www.domain.com
这样,您的生产cookie就不会出现在暂存环境中。
或
- 使用.domain.com,但后端的行为会因接收cookie的环境而异
一个解决方案是更改暂存环境中用于加密cookie的密码短语。
这样做将使来自生产的cookie无效。
这样做的方法依赖于web服务器,例如在Apache HTTP服务器上:
http://httpd.apache.org/docs/current/mod/mod_session_crypto.html
来自以上链接的文本:
SessionCryptoPassphrase secret
会话将使用给定的密钥进行加密。通过确保在每个服务器上使用相同的加密密钥,可以将不同的服务器配置为共享会话。
如果加密密钥发生更改,会话将自动失效。
因此,请了解如何在暂存环境中更改web服务器上的密码短语,来自生产的所有cookie以及来自暂存的所有cookie(过去发布的(在暂存时都将被视为无效。
如果您不想使用单独的域或www子域,您可以将暂存环境名称附加到cookie名称中。
但就我个人而言,我会在后端和spa之前放置一个API网关/代理,以将这两个服务保持在一个域(domain.com
和domain.com/api
(下。
对于暂存:staging.domain.com
和staging.domain.com/api
或完全独立的域,以避免在SSL证书中暴露暂存地址。
我不允许在设置cookie时省略domain
来共享cookie。可能,我会将cookie路径设置为/api
。