用户可以通过点击后退按钮退出后在IE中重新登录

时间:2010-07-27 21:42:05

标签: php internet-explorer login back-button

我正在使用PHP登录脚本来挑战用户的用户名&密码。

经过身份验证的程序会存储会话值。注销时,会话值为 设置为空白。

以下是问题:

在IE 8(不是Firefox)中,用户可以多次按回按钮直到 屏幕显示“网页已过期”消息。这可能是登录屏幕。

如果他按下F5,看起来用户名和密码仍然存在 在POST变量中他会重新登录。

3 个答案:

答案 0 :(得分:0)

听起来您实际上并没有删除服务器上的会话,而是清除客户端上URL(或其他内容)中的sessionID。因此,当按下后退按钮时,它会尝试重新提交sessionid,并且您的服务器正在接受它。

OR

页面只是由客户端缓存,当他们按下时,它从缓存加载。当他们强制刷新时,它会重新加载没有变量的页面。

答案 1 :(得分:0)

您将需要执行基于会话的验证程序来解决此问题。您使用随机验证器字符串将隐藏字段传递给您的登录表单。将随机字符串存储在会话中,并使用重新发布的隐藏字段来验证此标识符。确认登录后重新生成验证程序,以便下次发布表单时验证程序不正确,后退按钮发布不起作用。

答案 2 :(得分:0)

发布登录表单并验证/登录/所有内容后,执行header('location:someOtherPage.php)重定向到其他页面。然后按f5将无法重新发布表单。例如:

//login.php
<?php
//no cache headers if you want.
session_start();
if(isset($_POST) && !empty($_POST)){
    //validate user & pass. if valid set session then...
    if(is_valid_user()){
        //set session
        $_SESSION['loggedIn'] = true;
        //close session. this prevents problems with vars not
        //setting when using a header redirect because you redirect
        //before the session file can write.
        session_write_close();
        //redirect to another page
        header('location:loggedIn.php');
        //stop the script from running
        exit;
    } else {
        echo "<div class='error'>Login failed.</div>";
    } 
}
//echo login form.

?>

标题重定向未显示在历史记录中,因此当按下它们时,它们将看不到允许您重新发布表单的页面。