如何创建PHP登录表单重定向回保留$_POST和$_GET的页面


How to create PHP login form redirecting back to the page preserving $_POST and $_GET

例如,用户使用一个网站,在表单中填写一些信息,然后单击一个按钮或只是单击一个链接,但服务器发现该用户没有登录(由于某些原因,不再登录)。服务器必须向用户发送登录表单,用户填写登录表单并单击"确定",然后用户必须被发送到请求页面,即他填写了表单或单击了uri链接(不是吗?)。因此,保存$_GET看起来很容易--使用$_SERVER["REQUEST_URI"]

 echo '<form action = "'.$_SERVER["REQUEST_URI"].'" method = "post">'.
      '<input type = "text" name = "login">'.
      '<input type = "password" name = "password">'.
      '<input type = "submit" value = "OK" name = "login_form">'.
      '</form>';

但是如何保存$_POST?我是要迭代这个数组的所有元素来创建这种形式的隐藏输入,还是有一个更容易做到的想法?

您可以将$_POST数据添加到用户的会话:

session_start();
$_SESSION['form_elements'] = $_POST;

然后在用户登录后从会话中恢复数据。

两种方法:

  1. 按照您的建议,将字段作为隐藏表单字段放入登录表单中
  2. 序列化$_POST数组,将其存储在会话或cookie中(如果数据可能很大,则不要使用cookie),然后在目标页面上,检查是否存在会话数据或cookie,如果存在数据,则再次取消序列化

您可能需要检查为什么要保留GET或POST变量。您真正要做的是尝试在页面请求之间保留状态,使用用于用户一次性数据输入的变量。

我建议您将需要保存的任何状态保存在会话中,并将其与cookie关联,以便在客户端请求页面时引用。事实上,PHP具有会话功能,可以自动为您完成所有这些操作—请参阅http://us.php.net/sessions.

如果每个用户都有很多状态要携带,可以考虑将会话作为数据库后端会话表中的主键,以便在需要时为其他数据提供外键。

附带说明一下,在安全性方面,永远不要相信GET或POST数据是您所期望的。两者都很容易在服务器脚本的控制之外进行访问和修改。