2012-09-04 59 views
0

我正在使用Zend Framework编写一个ERM应用程序,在该应用程序中,在主公司帐户下创建用户帐户,使我能够根据公司支付的许可证限制公司的用户帐户数。每个公司帐户在我的服务器上都有自己的数据库(与其他公司具有相同的结构),以存储与该公司有关的数据。每个公司数据库的名称与其余公司帐户信息和许可证密钥一起存储在我的“后端”数据库中。该认证系统的工作原理如下:多数据库认证系统,我应该在哪里使用Zend Framework存储会话?

  1. 一个新用户(从来没有使用过的应用程序)土地上的索引页,并通过一个单一的文本字段迎来了“公司账户号码”
  2. 在点击“提交“,身份验证的下一步是用户名和密码。当用户提交此表单时,所有三条信息(帐号,用户名和密码)都会发送到我的应用程序的身份验证处理程序。
  3. 我首先查询存储公司账户的“后端”数据库,看看用户输入的账户是否存在。如果是,则返回company_db_name列,并建立连接,然后保存在Zend_Registry中。否则,认证失败。
  4. 如果公司帐户确实存在,则返回的数据库将为其指定的用户名和密码哈希值查询其表,如果凭据不正确,则返回成功的实例MyApp_Authfalse

起初,我打算将用户会话数据存储在单个公司数据库中,但是我遇到了首次登录到应用程序索引页时没有与该数据库连接的问题。

  1. 将我的会话存储表与客户的数据库,以我的“后台”数据库,其中有一个连接,一旦应用程序启动:我有如下计划的一种变通方法。
  2. 将“公司帐号”列添加到表中并为此列编制索引。
  3. 当用户登录应用程序index页面时,可以查询当前用户代理的sessionid的后端数据库。如果找到了,则返回所有必要的信息,即公司数据库名称以建立连接,并返回用户的信息以建立模型。

我有一个关于这个方法几个问题:

问题1:是否有存储在一个单一的后端数据库表我的应用程序的每个用户的所有会话信息的任何风险?我正在以数千用户的心态思考。

问题2:我担心新用户可能访问索引页并且完全机会(理解这是一种非常低的可能性,但仍然有可能)具有与后面的现有会话相同的session_id - 结束数据库。这是一个有效的关注,如果是这样,它是否可以缓解?

问题3:有没有更好的方法,或者您会推荐一种不同的方法来实现我所需的功能?

谢谢你的时间!

回答

0

要回答你的3个问题:

答案1.的不这样对每个用户的存储会话信息的风险只要你删除它的会话过期。这里的问题是“可扩展性”你使用什么方法?它足够可扩展吗?什么是写/读速度?与MSSQL一样,MySQL是“结构化”的方法。你在寻找什么样的处理时间?有多少信息存储?什么是建筑学研究。你的客户可行吗?

答案2.理想情况下,session_id不会相同,因此不应该成为您的担忧。

回答3。您需要NoSQL(不只是SQL,但更多)方法。 Read this

看你的数据的大规模的烦躁,我强烈建议你去HBASE(使用Hadoop的,方便多簇)或CouchDB或者如果你是亚马逊风扇dynamoDB

有问题? :)

编辑:刚才意识到你正在使用Zend框架。在这种情况下,您也可以使用MongoDB,并使用Shanty Mongo库。

+0

谢谢您的输入!目前,我无法调整使用MongoDB的数据层,尽管我可能会考虑这一点。应用程序的性质需要特别深入的报告功能,我觉得MongoDB可能不是最适合的功能。关于问题#2,我明白发生这种情况的可能性非常低,但即使在PHP的session_id生成中增加了“随机性”,也可能存在这种可能性。我有一个想法,通过IP比较来消除重复ID的(再次,令人难以置信的小)机会。 –

+0

那么,我猜你没有任何疑问? – Karma

相关问题