问题描述
||
例如,用户使用站点,在表单中填写一些信息,然后单击按钮或仅单击链接,但是服务器发现该用户未登录(出于某些原因,不再登录)。服务器必须向用户发送登录表单,用户填写登录表单,然后单击确定,然后将该用户发送至请求页面,即就像他填写表单或单击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;
用户登录后,从会话中还原数据。
, 有两种方法可以做到这一点:
如您所建议,将字段作为隐藏表单字段放入登录表单。
序列化$ _POST数组,将其存储在会话中或cookie中(如果数据可能很大,请不要使用cookie),然后在目标页面上,检查会话数据或cookie是否存在并反序列化如果数据在那里,请再次输入。
, 您可能需要检查为什么要保留GET或POST变量。
您真正要做的是尝试使用用于用户一次输入数据的变量来保留页面请求中的状态。
我建议您保存需要保存在会话中的任何状态,并将其与您在客户端请求页面时可以引用的cookie关联。实际上,PHP具有会话功能可以自动为您完成所有这些操作-请参阅http://us.php.net/sessions。
如果每个用户都有很多状态,请考虑将会话设为数据库后端会话表中的主键,可以在需要时将外键指向其他数据。
附带说明一下,在安全性上下文中,切勿将GET或POST数据视为您期望的样子。两者都很容易在服务器脚本的控制范围之外访问和修改。