首页 > 解决方案 > 覆盖php超全局数组可以吗?

问题描述

这基本上就是我想要完成的事情。我有一个由 PHP 处理的 HTML 表单。用户需要经过身份验证才能提交此表单。但是,如果用户在填写时会话超时,我不希望用户丢失他们的工作。

我的想法是,当我执行身份验证检查时,如果失败,身份验证模块可以将$_POST数据存储在$_SESSION数组中,并将用户重定向到登录页面。一旦用户登录,登录页面可以将用户重定向回提交页面,然后认证模块会看到数组中有保存$_POST的数据,并将$_SESSION数组设置$_POST回存储在$_SESSION. 然后提交页面就可以正常处理表单数据了。

我已经完成了测试并验证了它实际上(至少在我使用的 PHP 版本中)可以覆盖$_POSTPHP 中超全局的值。而且,在这种特殊情况下,这样做似乎很有意义。使用这种方法,除了身份验证模块之外,无需为整个站点上的每个表单修改任何其他站点代码,以利用“保存的帖子数据”功能。

所以,我问自己是否可以做到这一点,答案是肯定的。但我应该吗?或者使用这种方法是否存在潜在问题?我的一部分说这很有意义,但我的另一部分担心这可能是糟糕的代码设计。如果我不应该这样做,那么正确的方法是什么?

标签: php

解决方案


感谢所有的评论。我最终使用以下代码放置在所有页面使用的公共库文件中。唯一的缺点是您必须记住在global $post使用特殊 POST 数据的任何函数或方法中使用。但它的优点是不像我之前的想法那样老套。

    if (isset($_SESSION['authSavedPost'])){
      $post = $_SESSION['authSavedPost'];
      unset($_SESSION['authSavedPost']); // So we don't try to re-post the same data twice
    }
    else{
      $post = $_POST;
    }

此表单和其他表单上使用的身份验证检查功能,如果失败,将保存当前的 POST 数据,$_SESSION['authSavedPost'] = $_POST以便以后可以通过上述代码恢复。


推荐阅读