我使用PHP挑战响应脚本,以方便我的用户登录到我的网站。几年前我在网上找到了这段代码,所以我没有自己写,因此我不太理解它。
无论如何,它一直工作良好,但我注意到,当一个用户的会话到期,有时他们无法再次登录,不得不诉诸于使用不同的浏览器。这个问题似乎在一段时间后自行解决了,但我不知道为什么或如何。
有时,这就像关闭浏览器并重新打开它一样简单,但有时这也行不通。它只是不断给出会话过期的消息。我不知道这是浏览器错误,还是我可以在代码中做些什么来防止这种情况发生。我在Chrome中看到过这种情况,用户抱怨在IE中也会发生这种情况。
下面是我的代码(除去不重要的东西):if (isset($_SESSION[challenge]) && isset($_POST[username]) && isset($_REQUEST[response])) {
// Authenticate user stuff goes here
} else {
$error = "Session expired or not established. You may need to close your browser and reopen it.";
$encryptederror = encrypt(urlencode($error),$encryptionkey);
header("Location:index.php?con=login&error=".$encryptederror);
exit;
}
当用户试图再次登录时,如何防止代码连续进入else语句?
您在$_POST
和$_SESSION
中缺少引号