会话变量仅在使用IE时不一致

时间:2013-08-19 04:22:51

标签: php internet-explorer session login

我有一个基于会话的登录系统,在使用Chrome,Safari或Firefox浏览时效果很好,但在使用Internet Explorer 6,7,8或10(每个IE浏览器)查看时会产生同样的问题尝试过 - 并且已经在8台不同的计算机上试过了。问题非常奇怪:成功的初始登录工作正常。如果您注销,或者如果第一次尝试您的用户名/密码错误,它似乎将自己锁定在一个状态,无论您做什么,您都不会A)成功登录,或者B)看到询问是否提示你忘记了用户名和密码。

我确信这与缓存有关,因为当我刷新Home.php时它再次起作用。但我无法弄清楚如何解决它。我尝试过没有使用元标记和标题调用的缓存无效,尝试更换Header(Location:)次调用,并尝试在帖子中找到各种愚蠢的建议,例如将Cookie生命周期提高到21600以上并使用if ( == TRUE)代替if ()。所以现在我真的没有想法。

以下代码段。

Home.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>");

的login.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')");

main.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是否在登录失败后发生变化,看起来它们保持不变。

0 个答案:

没有答案