php登录/注销为一个页面


php Login / Logout as one page

我正在尝试使用case、switch和session来完成一个页面管理面板。

我的代码是:

<?php
    if (isset($_SERVER['QUERY_STRING'])) {
        switch ($_SERVER['QUERY_STRING']) {
            case "logout":
                break;
            case "restpassword":
                break;
            // Default Page
            default:
                session_start();
                if (isset($_POST['username']) && isset($_POST['password']) && $_POST['username']) {
                    $username = $_POST['username'];
                    $password = $_POST['password'];
                    $userid = login($username, $password);
                    if ($userid != "0") {
                        //Correct username and password set session & redirect
                        if (isset($_SESSION['user_id'])) {
                            $userid = $_SESSION['user_id'];
                            $username = $_SESSION['username'];
                            echo "Welcome " . $username;
                        }
                        break;
                    } else {
                        $msg = "Incorrect username or password";
                    }
                }
                ?>
                <html>
                    <head>
                    </head>
                    <body>
                        <form method="post">
                            <?php
                                //Print error message
                                if (isset($msg)) {
                                    echo $msg;
                                }
                            ?>
                            <label>Username:</label>
                            <input name="username" type="text" required="true"/>
                            <label>Password :</label>
                            <input name="password" type="password" required="true"/>
                            <input type="submit" name="submit" value="Login" required="true"/>
                        </form>
                    </body>
                </html>
                <?php
                break;
        }
    }
?>

问题是,如果我重新进入页面,它不会保存任何会话,我必须再次登录。

我应该如何解决它?这样安全吗?

非常感谢

将session_start()移动到页面的最顶部。php打开标记后的第一行。。。

session_start()需要添加到页面的最顶部。我认为这会奏效。