Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问不同的数据库,防止用户错误_Javascript_Php_Postgresql_Security - Fatal编程技术网

Javascript 访问不同的数据库,防止用户错误

Javascript 访问不同的数据库,防止用户错误,javascript,php,postgresql,security,Javascript,Php,Postgresql,Security,我正在开发一个允许用户更改数据库连接的工具。 所以用户有一个选择框,他在其中选择desire数据库。我一共有4个不同的数据库,但结构是相同的,只有数据变化 如果用户只使用一个打开的选项卡,我不会有任何问题。但如果用户只使用很少的选项卡,就会出现很多安全问题 例如: 选项卡1-用户希望编辑数据库1中的行 同时,用户将Tab2更改为数据库3。 因此,当他要保存Tab1时,可能会保存到数据库3,因为这是最后一次更改 我正在$\u SESSION var上保存所选数据库 我的代码现在有一个表单,用户可以

我正在开发一个允许用户更改数据库连接的工具。 所以用户有一个选择框,他在其中选择desire数据库。我一共有4个不同的数据库,但结构是相同的,只有数据变化

如果用户只使用一个打开的选项卡,我不会有任何问题。但如果用户只使用很少的选项卡,就会出现很多安全问题

例如: 选项卡1-用户希望编辑数据库1中的行 同时,用户将Tab2更改为数据库3。 因此,当他要保存Tab1时,可能会保存到数据库3,因为这是最后一次更改

我正在$\u SESSION var上保存所选数据库

我的代码现在有一个表单,用户可以在其中选择数据库。在_init.php上,我有一个简单的切换案例,根据所选数据库的不同需要不同的config.php


如何防止此类错误发生?

如果将活动连接存储在$\u会话中,则无论在浏览器中打开多少个选项卡,都只能有一个活动连接,因为会话是跨选项卡共享的

相反,您可以为每个连接提供计数器或数字标识符:

例如:

1 = connection 1
2 = connection 2
...
如果用户从选择框更改了连接,请使用重定向和带有连接号的send-GET参数

例如:

1 = connection 1
2 = connection 2
...
  • 如果选择连接1,浏览器将重定向到index.php?cn=1
  • 如果在另一个选项卡中使用Connection2,浏览器会将我重定向到index.php?cn=2
您将始终需要通过GET或POST发送连接id,并接收它,而不是在$\u会话变量中查看它

希望它有帮助

如果允许每个并发选项卡使用单独的数据库连接,那么每个并发选项卡在向服务器发送请求时都需要指定该信息

这可以简单到在每个表单的隐藏字段中包含数据库的标识符。当用户在该页面上选择其他数据库时,更新该隐藏字段。(这里主要是猜测“隐藏字段”结构,因为我们不知道表单的布局。但问题是表单应该包含此值。)

这将成为一种更全面的RESTful方法,从会话状态转移到由页面本身驱动的状态转移。总的来说这是件好事


基本上,由于对正在执行的操作(保存记录)的请求需要知道将其保存在何处,因此在请求本身中包含该信息,而不是试图在服务器端处理该信息。

老实说,我会对您的问题采取不同的方法

在服务器上设置子域,这些子域指向相同的web文件夹,并具有硬编码的DB连接设置

db1.example.com db2.example.com db3.example.com db4.example.com
至于创建一个选择数据库的
框的想法,您可以实现一些JS来打开一个指向正确子域的新选项卡。

用户教育是一个选项吗?“在触摸此设置之前关闭所有其他选项卡。”否则,您将面临一场无休止的艰苦战斗。想象一下这个场景:Conn1在Tab1中打开,Tab2打开并切换到Conn2。Tab1中的数据更新,页面刷新,因为您没有使用AJAX,所以用户看不到他们所做的更改。这就是@MonkeyZeus的问题所在。但我们不能信任用户:(您好@David。所有选项卡都应该是相同的数据库连接。但是如果用户在一个选项卡中更改,我只知道他在重新加载页面后在另一个选项卡中更改了。这就是问题所在。我们这里没有任何API。@620009030:听起来您想在定义技术实现之前定义用户体验。如果用户有两个选项卡打开并在一个选项卡中更改数据库,会发生什么?(我不确定您对API的定义,这有什么关系?)如果用户在选项卡1中更改DB,我不能允许他在选项卡2中保存任何内容(如果它有不同的DB连接)@620009030:那么此方法将允许与您当前的方法相结合。如果您在会话状态中存储“当前数据库”,则在提交指定“当前数据库”以外的数据库的表单时你可以返回一个错误,用友好的消息刷新页面,等等。那么你的意思是我用当前数据库在所有表单中添加一个隐藏字段。与保存新内容之前相比,比较SESSION var是否与隐藏字段相同。如果是保存,如果不是显示错误。是吗?ThanksHi@MonkeyZeus。实际上这是我们以前的方法。但对吗现在,人们想要改变它,让所有的数据都在同一个域中,更快地改变数据库connection@62009030在这种情况下,我建议在使用
框切换DBs时创建一种自动登录用户的方法。按照
$\u会话
的想法进行操作会导致灾难。好吧,我必须用一些安全性,我还不知道怎么做,但老板希望如此…@620009030“实施一些安全措施”@620009030你能确定你系统的用户到底是谁吗?