1

我有一个基于会话的登录系统,使用 Chrome、Safari 或 Firefox 查看时运行良好,但使用 Internet Explorer 6、7、8 或 10(我尝试过的每个 IE - 和这些已经在 8 台不同的计算机上进行了尝试)。问题非常特殊:成功的初始登录工作正常。如果您注销,或者如果您在第一次尝试时输入了错误的用户名/密码,它似乎将自己锁定在一种状态,无论您做什么,您都不会 A) 成功登录,或 B) 看到询问是否您忘记了用户名和密码。

我确信这与缓存有关,因为当我刷新 Home.php 时它会再次工作。但我不知道如何解决它。我尝试使用元标记和标头调用来引导无缓存,尝试替换Header(Location:)调用,并尝试在帖子中发现的各种愚蠢的建议,例如将 cookie 生命周期提高到 21600 以上并使用if ( == TRUE)而不是if (). 所以现在我真的没有想法了。

下面的代码片段。

主页.php

<?php
$lifetime=6000;  //100 minutes
session_set_cookie_params($lifetime, '/');
session_start();
setcookie(session_name(),session_id(),time()+$lifetime);

...

if(isset($_SESSION['failedlogin'])) {if ($_SESSION['failedlogin']){?>
<div id="failedlogon"><a href="userreminder.php"><img src="images/loginfail.png" width="193" height="50" alt=""/></a></div>
<?php
}}

...

if($_SESSION['validlogin'] == TRUE) {  //if logged in redirect to main.php
printf("<script>location.href='main.php'</script>");

登录.php

<?php
$lifetime=6000;  //100 minutes
session_set_cookie_params($lifetime, '/');
session_start();
setcookie(session_name(),session_id(),time()+$lifetime);
if ($_POST['loginsubmit']){
$query = mysql_query("SELECT * FROM users WHERE UPPER ( UserName ) = UPPER('$user') and Password='$pass' LIMIT 1")  or die(mysql_error());
$userdata = mysql_fetch_array($query);
$num_rows = mysql_num_rows($query);
if($num_rows == 1)
    {
    $_SESSION['validlogin'] = TRUE;
    $_SESSION['username'] = $userdata['UserName'];
    $_SESSION['userid'] = $userdata['ID'];
    $_SESSION['failedlogin'] = FALSE;
    unset($_SESSION['failedlogin']);
    }else{
    $_SESSION['validlogin'] = FALSE;
    unset($_SESSION['validlogin']);
    $_SESSION['failedlogin'] = TRUE;
    }
}
printf("window.location.replace('Home.php')");

主.php

<?php
$lifetime=6000;  //100 minutes
session_set_cookie_params($lifetime, '/');
session_start();
setcookie(session_name(),session_id(),time()+$lifetime);

    if ($_SESSION['validlogin'] == '' || $_SESSION['validlogin'] == FALSE){  //not a page to be on if you're not logged in.
        header('Location: Home.php'); 
        die();
    }

我真的在董事会上找不到任何有价值的东西。我尝试检查会话 cookie 在登录失败后是否发生了变化,并且看起来它们保持不变。

4

0 回答 0