多数据库身份验证系统,我应该在哪里使用Zend Framework存储会话?

时间:2012-09-04 16:27:18

标签: zend-framework session authentication zend-auth

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

  1. 新用户(之前从未使用过该应用程序)登陆索引页面,并受到“公司帐号”的单个文本字段的欢迎
  2. 点击“提交”后,身份验证的下一步是用户名和密码。当用户提交此表单时,所有三条信息(帐号,用户名和密码)都将发送到我的应用程序的身份验证处理程序。
  3. 首先查询存储公司帐户的我的“后端”数据库,以查看用户输入的帐户是否存在。如果是,则返回company_db_name列,然后建立连接,然后保存在Zend_Registry中。否则,身份验证失败。
  4. 如果公司帐户确实存在,则返回的数据库会针对指定的用户名和密码哈希查询其users表,该表会返回MyApp_Authfalse的成功实例如果凭据不正确。
  5. 首先,我计划将用户会话数据存储在各个公司的数据库中,但是我遇到的问题是,当首次登陆应用程序的索引页面时,该数据库没有连接。我计划了一个解决方法如下:

    1. 将我的会话存储表从客户的数据库中移出到我的“后端”数据库,该数据库在应用程序启动后立即建立连接。
    2. 在表格中添加“公司帐号”列并为此列编制索引。
    3. 当用户登陆应用程序index页面时,可以查询后端数据库以查找当前用户代理的sessionid。如果找到,则返回所有必要的信息,即公司数据库名称以建立连接,以及用户建立模型的信息。
    4. 我对这种方法有几个问题:

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

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

      问题3:有没有更好的方法,或者您是否会推荐其他方法来实现我所需的功能?

      感谢您的时间!

1 个答案:

答案 0 :(得分:0)

回答你的3个问题:

答案1。只要您在会话到期时将其删除,每个用户的存储会话信息都不是 risk 。这里的问题是“可扩展性”你使用什么方法?它足够可扩展吗?什么是写/读速度? MySQL就像MSSQL一样是“结构化”的方法。你在寻找什么样的处理时间?存储了多少信息?什么是建筑研究。对您的客户来说是否可行?

回答2。理想情况下,session_id将不相同,因此不应该是您的关注。

回答3. 您需要NoSQL(不仅仅是SQL,甚至更多)方法。 Read this

查看数据的大量情况,我强烈建议您选择HBASE(使用Hadoop,轻松实现多群集)或CouchDB或者如果您是亚马逊粉丝{{3} }。

有问题吗? :)

编辑:刚刚意识到你正在使用Zend Framework。在这种情况下,您还可以使用dynamoDB,并使用MongoDB库。