避免“登录后重新发送表单确认”


Avoid "resend form confirmation after login

我正在使用此脚本登录正在开发的站点:http://www.php-login.net/

我正在使用简单的登录,如下所示:

 require_once("config/db.php");
 // load the login class
 require_once("classes/Login.php");
 // create a login object.
 $login = new Login();
// ... ask if we are logged in here:
if ($login->isUserLoggedIn() == true) {    

$userid = $_SESSION['user_id'];

$time = Users::getData($userid);
include("views/logged_in.php");    
} else {
// the user is not logged in...
include("views/not_logged_in.php");
}

该脚本将登录 ID 保存在会话中,然后我将其用作函数 getData 中的参数。这工作正常,问题是当我a) 重新审视页面b) 在浏览器中使用前进/后退按钮进行导航。

我不断收到"确认重新发送表单..."消息弹出,这当然不是很用户友好。

我怎样才能避免这种情况?

您必须

使用header并在发布表单后重定向网站。

如果用户登录,就会发生这种情况,登录后他立即单击注销。然后,当您在浏览器中按后退按钮时,会发送带有 $_POST 的日志记录数据的表单,浏览器会询问您是否要再次发送该表单。

使用此解决方案可避免再次发送表单(单击后退按钮或按 F5(刷新)时):

当您处理包含登录数据的表单时,请重定向到同一页面或主页(它在您身上)。用

header("HTTP/1.1 302 Found");
header('Location: '.$url_to_redirect);

然后,当他单击后退按钮或刷新页面时,它不会再次发送登录数据,因此不会再次处理登录。