我正在使用 Zend 框架编写一个 ERM 应用程序,其中用户帐户在主要公司帐户下创建,使我能够根据公司支付的许可证限制公司的用户帐户数量。每个公司帐户在我的服务器上都有自己的数据库(与其他公司具有相同的结构)来存储与该公司相关的数据。每个公司数据库的名称与其他公司帐户信息和许可证密钥一起存储在我的“后端”数据库中。身份验证系统的工作原理如下:
- 一个新用户(以前从未使用过该应用程序)登陆索引页面,并看到“公司帐号”的单个文本字段
- 点击“提交”后,下一步是验证用户名和密码。当用户提交此表单时,所有三条信息(帐号、用户名和密码)都将发送到我的应用程序的身份验证处理程序。
- 首先查询我存储公司帐户的“后端”数据库以查看用户输入的帐户是否存在。如果是,
company_db_name
则返回该列并建立连接,然后将其保存在Zend_Registry
. 否则,认证失败。 - 如果公司帐户确实存在,则返回的数据库将在其
users
表中查询指定的用户名和密码哈希,该哈希要么返回成功实例,要么返回MyApp_Auth
凭据false
不正确。
起初,我计划将用户会话数据存储在各个公司的数据库中,但是我在第一次登陆应用程序的索引页面时遇到了与该数据库没有连接的问题。我计划了一个解决方法,如下所示:
- 将我的会话存储表从客户的数据库中移到我的“后端”数据库,该数据库在应用程序启动后立即建立连接。
- 将“公司帐号”列添加到表中并索引该列。
- 当用户登陆应用程序
index
页面时,可以在后端数据库中查询当前用户代理的sessionid
. 如果找到,则返回所有必要的信息,即建立连接的公司数据库名称,以及用于建立模型的用户信息。
关于这种方法,我有几个问题:
问题 1:将我的应用程序的每个用户的所有会话信息存储在单个后端数据库表中是否有任何风险?我在考虑成千上万的用户心态。
问题 2:我担心新用户可能会访问索引页面并且完全有可能(理解这是非常低的可能性,但仍有可能)与后端数据库中的现有会话具有相同的 session_id。这是一个有效的担忧吗?如果是,可以减轻吗?
问题 3:有没有更好的方法,或者您会推荐一种不同的方法来实现我所需的功能?
感谢您的时间!