跨同一个域中的多个CI实例共享/代理CodeIgniter会话

问题描述

|| 我有以下设置:
Site1 (Core) at Core.example.com
Site2 (Work1) at Work1.example.com
Site3 (Work2) at Work2.example.com
等等...我将只讨论用户user1ѭ,但问题适用于所有
Work
网站 这个想法是“ 3”用于登录,付款,帐户管理等,并且工作站点提供的功能完全不同,足以证明单独的CI实例/ Dbs / etc是正确的。 这很有效,因为cookies3可以设置由其他站点拾取的cookie。 我遇到的问题是,我想允许例如
Work1
代表用户(作为用户)向ѭ3calls进行呼叫-用于更新用户帐户详细信息,获取可供用户使用的服务列表等。 我目前正在尝试通过CURL进行此操作。如果我在客户端对
Work1
发出的HTTP请求中读取了
Core
会话cookie,并将其从
Work1
注入到
Core
到CURL请求中,则
Core
不接受它作为有效的会话cookie。我不确定这是由于IP地址(客户端与
Work1
)不同还是其他原因引起的。 不幸的是,我需要1来拥有自己的数据库,因此共享数据库不是一个可行的选择。也就是说,我在各个站点上使用了相同的加密密钥,因此可以根据任何站点上的要求解密/解析cookie(或其他任何内容)。 有人可以建议我如何说服
Core
ѭ15发出的带有用户
Core
会话cookie的请求实际上是来自用户的吗?     

解决方法

        我最终能够通过读取cookie并将其注入curl请求中来解决此问题。我还必须处理通过CURL检索的会话cookie更新,将它们重新包装,然后将其传递回客户端。 我还扩展了IP验证,以检查会话IP是否为:当前请求的客户端IP或我的Work1站点的IP地址,并且HTTPS请求具有
MySite-OriginalIp
标头(该标头附加到我的所有CURL请求中)并且该值与会话匹配。 为了以健壮和可靠的方式进行操作,同时又不影响安全性,还需要进行许多其他安全性增强,调整和健全性检查-在此过多详细介绍。