php

zf9nrax1  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(327)

我有一个任务,创建一个现有的项目多租户,因为应用程序有许多客户端,所以我们决定这样做。
我们已经合并了我们的源代码与任何数据库,所有的源代码都是相同的所有客户端。
现在,前面的数据库连接是使用每个脚本中包含的一个配置文件进行的。
但是,正如您所知道的,源代码现在有多个不同的客户机,而这些客户机的数据库是不同的,我们只能用客户机来管理数据库。
一开始,
http://localhost/workspace/client/ -->这是一个提供给client的url,现在我使用htaccess将其重定向到index.php,并且基于client/我知道这个包将使用哪个客户端。
有不同的客户,http://localhost/workspace/clien1/http用法:/localhost/workspace/clien2/http://localhost/workspace/client3/
以此类推。。
现在,在index.php页面中重定向到login.php,但是没有根据客户机为db设置配置。
如果有人处理这事,请帮帮我。
提前谢谢。

6bc51xsx

6bc51xsx1#

数据库连接参数(服务器地址、数据库用户名/密码和数据库名称)在建议的设置中是用户或客户(用户的组织)的属性。
我猜您将通过在公共数据库中查找用户,然后使用验证密码来验证用户身份 password_verify() 当你知道你有一个有效的用户,你可以
从用户数据库检索数据库连接参数
将它们存储在php会话变量中
使用php的安全会话cookie方案,让用户的浏览器能够识别适当的会话。
在重定向之后,或者在随后的web请求中,打开会话变量中提到的db
确保你放置的cookie不包含嵌入其中的数据库参数,否则网络罪犯会想出如何更改cookie以获得未经授权的访问。
但是,专业提示:为每个客户创建一个新的数据库是众所周知的不可扩展的。如果
你的项目是成功的,你发现自己增加了一千个新的客户有一天?那一天你必须添加一千个数据库。
你在某个时刻有500个活动会话?它们中的每一个都有自己的dbms连接,这使得php的连接池方案毫无用处。连接池对于良好的web应用程序性能至关重要。
您需要执行覆盖所有客户的报告操作吗?您必须分别为每个客户运行报表,并找出如何在报表程序中将它们合并在一起。这很难。
对于多租户在线应用程序来说,一个好的实践是在每个数据记录上放置customer id或user id值,并使用查询子句,如 WHERE customer_id = ? (当前客户)按用户分隔数据。
希望现在重新考虑使用多个数据库的设计决策还不算太晚。

相关问题