在同一域上的多个CI实例之间共享/代理CodeIgniter会话

时间:2011-06-14 14:32:10

标签: session codeigniter proxy

我有以下设置:

Site1 (Core) at Core.example.com
Site2 (Work1) at Work1.example.com
Site3 (Work2) at Work2.example.com

等...我只会在讨论中使用Work1,但问题适用于所有Work网站

我们的想法是Core用于登录,付款,帐户管理等,而工作网站提供的功能完全不同,无法证明单独的CI实例/ Dbs /等。

这相对较好,因为Core可以设置由其他网站提取的Cookie。

我遇到的问题是,我希望允许例如Work1代表用户/作为用户拨打Core - 例如更新用户帐户详细信息,获取用户可用的服务列表等

我目前正试图通过CURL这样做。如果我在客户端向Core发出的HTTP请求中读取Work1会话cookie,并将其注入从Work1Core的CURL请求,Core不接受它作为有效的会话cookie。我不确定这是由于不同的IP地址(客户端与Work1)或其他原因造成的。

不幸的是,我需要Work1拥有自己的数据库,因此共享数据库不是一个可行的选择。也就是说,我在网站上使用了相同的加密密钥,因此可以根据任何网站的要求解密/解析cookie(或其他任何内容)。

有人可以建议我如何说服Core来自Worker1的用户Core会话Cookie的请求实际上来自用户?

1 个答案:

答案 0 :(得分:0)

我最终能够通过读取cookie并将其注入curl请求来解决这个问题。我还必须处理通过CURL检索的会话cookie更新,重新包装它们并将它们传递回客户端。

我还扩展了IP验证以检查会话IP是否为:当前请求的客户端IP或者是我的Work1站点的IP地址,并且HTTPS请求具有MySite-OriginalIp标头(附加到所有我的CURL请求)并且该值与会话匹配。

还有许多其他安全增强功能,调整和健全性检查,以便在不影响安全性的情况下以稳健可靠的方式实现这一目标 - 此处需要详细说明。