1

我创建的登录系统最初很好地记录了用户,用户被重定向到预期的索引。但是,当用户单击导航链接以导航到另一个页面(受限制)时,用户将被重定向到登录页面。当他们第二次登录时,每个页面都可以正常访问。

我尝试打印出会话 ID 并转储了会话数组。我注意到,当用户首先进入页面登录时,他们的会话 id 为“x”,然后他们被重定向到仍然有会话 id“x”的索引页面。但是,当他们尝试导航到站点上的另一个页面时,他们会被重定向到登录页面并且会话 ID 为“y”。当他们第二次登录时,每个页面都会显示他们的会话 ID 为“y”。

用户重定向后会话 ID 发生更改的原因是什么?

这是我的登录脚本。

   session_start();

   $username = mysql_real_escape_string($_POST['username']);
   $password = mysql_real_escape_string(md5($_POST['password']));
   $submit = $_POST['submit'];
   $error = '';

    if(isset($submit)){     
    // Check if fields are filled out
    if($username == '' or $password == ''){
        $error = 'Please enter a Username and Password';
    }else{  // Proceed with login process


        // See if user exists
        $query = mysql_query("SELECT * FROM users WHERE username='$username'");

        if(mysql_num_rows($query)<1){
            echo 'Invalid Username/Password Combination';
        }else{  // Grab user's information
            $user = mysql_fetch_assoc($query);

            if($password == $user['password']){//Login Success, Redirect and set Session Vars


                $_SESSION["loggedIn"] = true;
                $_SESSION['username'] = $user['username'];
                $_SESSION['name'] = $user['first'];
                $_SESSION['auth'] = $user['authorization'];
                session_write_close();      

                header("Location: home.php");
                exit;

            }else{
                $error = 'Invalid Username/Password Combination';
            }
        }   
    }
    }

和页面限制脚本:

session_start();

if(isset($_SESSION["loggedIn"])){
        echo '<div align="right" id="user">Welcome '.trim($_SESSION['name']).'! <a href="../resources/php/logout.php">Sign Out</a> | <a href="../resources/php/editAccount.php">Edit Account</a></div>';
    }else{
        header("Location: login.php");    
    }
4

3 回答 3

0

尝试在受限页面上设置会话变量。

session_start();
$_SESSION["loggedIn"]
$_SESSION["loggedIn"];
$_SESSION['username'];
$_SESSION['name'];
$_SESSION['auth'];
于 2012-04-22T04:28:10.107 回答
0

出于调试目的,请print_r($_SESSION)在每个页面上设置,看看它是否打印正确...您可以设置一个值,看看它是否带有跨页...

于 2013-06-12T04:46:32.820 回答
0

我遇到了非常相似的问题,并发现在指向无法识别设置会话值的页面的链接中包含 GET 参数是问题所在。虽然 session_start() 是页面脚本的第一行,导致需要第二次登录,但上一页链接中的 GET 参数被处理为请求页面的第一行(至少这是我的猜测至于为什么)。

于 2022-01-14T16:15:40.470 回答