会话,多个选项卡和多租户数据库

时间:2011-08-06 19:01:50

标签: php session codeigniter multi-tenant

我正在使用CodeIgniter中的多租户应用。会话通过数据库安全处理。 user_id和company_id都存储在服务器会话中,并且大多数表具有company_id(与公司表中的id字段相关)和user_id字段。将项目保存或更新到数据库中时,会话中的company_id将自动附加到查询中,并填充到数据库中。

假设UserA可以访问CompanyA(company_id 1)和CompanyB(company_id 2)。他在浏览器中打开了CompanyA,并打开了一个表单,为该公司保存了一个新产品。就在他点击保存之前,他在浏览器中打开了第二个标签,然后切换到CompanyB。这意味着company_id的会话将在服务器上更改。现在,他回到第一个标签,点击保存 - 他认为他正在为CompanyA保存一个产品,但实际上服务器会话已经改变,并保存到CompanyB。

我认为这种理论制定是正确的。如果是,最好的方法是什么?我能想到的唯一方法是在每种形式中使用隐藏的company_id字段。

1 个答案:

答案 0 :(得分:0)

您有三种选择: 在隐藏字段上设置公司ID, 为引用会话的表单设置令牌或在URL上传递公司ID。

我相信正确的approch但不是最简单的是传递一个令牌,所以你可以将它扩展到所有需要它的表单,在Zend你有一个Zend_Form_Element_Hash,我不知道CodeIgnitier但是你可能有类似的东西。