【发布时间】:2011-12-02 15:55:58
【问题描述】:
在关于防止 PHP 表单重新提交的 article 中,我阅读了以下内容:
(不引用)这可能是接收表单数据的页面,例如称为“form.php”:
<form action="submit.php">
<input type="text" name="user" required />
<input type="password" name="pass" required />
<input type="submit" value="Log in" />
</form>
因此,处理 POST 数据的页面将被称为“submit.php”。如果登录正确,此代码将运行:
header('Location: /login/form.php?success=true');
但是,用户不能直接导航到上面的 URL 吗?另外,GET 变量的目的是什么?我不能只在 form.php 中有一个脚本来检查用户是否登录吗?
在 submit.php 中,我应该将登录的用户名保存为 $_SESSION['username'],然后在 form.php 中检查是否 isset()?此外,由于其中包含“成功”的 URL 不是很漂亮,再次重定向用户是否经济?我应该使用 PHP header() 还是 Javascript window.location.href? 如您所见,我有点困惑。
感谢您的帮助。
【问题讨论】:
-
“但是,用户不能直接导航到上面的 URL 吗?” - - 是的,他能。那么?
-
你是对的,没有 POST 数据不会造成任何伤害。
-
网址中的
?success并没有那么难看。我一直都在使用这样的东西,因为大多数人都不注意它,而且它真的很容易。 -
我假设该示例中查询字符串的目的是供
form.php用来确定它是否应该显示成功消息。如果你愿意,你可以在会话中做这种事情。重要的部分是有一个重定向,所以重新加载不会重新执行 POST,只是对成功页面的无害 GET。 -
@user805556:它是任何类型表单的通用解决方案,例如添加评论表单。在这种情况下,检查消息是否已成功添加并不像
if (isset($_SESSION...那样容易