声明页面后,该页面将不会保存$ _SESSION

时间:2019-08-06 20:30:11

标签: javascript php jquery

因此,对于一个学校项目,我试图创建一个登录页面,以便用户登录时能够看到其他页面。到目前为止,我可以让用户创建一个帐户并从数据库中获取数据。但是,当我刷新页面以转到其他页面所在的其他.php文件时。他似乎没有保存会话,因此他继续加载“基本”页面。我是这一切的新手,我正在尝试学习。但是此刻我退出了。任何帮助将不胜感激!

我有我的索引页,我在其中区分要加载的哪一页。 如果用户未登录,则转到header.php。如果他已成功登录,则应转到headerlogin.php。那就是我被困住的地方。我已经建立了数据库,一切正常。

索引


<!-- Wrapper -->
<div id="wrapper">

    <!-- Header -->
    <?php
    //if user is not logged in show :
    if(!isset($_SESSION["user"])){
        $headerSentence = "Belgian Urban Exploring ";
        include('header.php');
    } else { //if user is logged in show :

        $headerSentence = "Welcome " . $_SESSION["user"] . "!";
        include('headerlogin.php');
    }

    //if user is logged in and not admin show :

    //else show :
    ?>

标题

            <div class="modal-dialog modal-dialog-centered" role="document">
                <div class="modal-content">
                    <div class="modal-header">

                        <h5 class="modal-title" id="exampleModalCenterTitle">Log in: </h5>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body">
                        <form action="dologin.php" id="loginForm" method="POST">
                            <h4 id="userCreationMsg"></h4>
                            <div class="input">
                                <span id="loginError" class="SpecialRed"></span>
                                <label for="username">Username:</label>
                                <input type="text" name="username" id="loginUsername" value="<?php $valuesLogIn["username"] ?>">
                            </div>
                            <div class="input">
                                <label for="username">Password:</label>
                                <input type="password" name="password" id="loginPassword" value="<?php $valuesLogIn["password"]?>">
                            </div>

                            <div>
                                <span class="specialRed loginErrorMessage"></span>
                            </div>
                            <div class="input">
                                <input type="submit" id="submitLogin" value="logIn">
                            </div>
                            <div>
                                <input type="text" name="staylogged" placeholder="Write 'OK' if u want to stay logged in" value="<?php $valuesLogIn["stayloggedin"]?>">
                            </div>
                        </form>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-primary" id="btn-signup">Don't have an account? Sign up here</button>
                        <button type="button" class="btn btn-secondary close-btn" data-dismiss="modal">Close</button>
                    </div>
                </div>
            </div>
        </div>

dologin


if($_SERVER['REQUEST_METHOD'] == 'POST') {

    if(isset($_POST["username"]) && isset($_POST["password"])){

        include_once "database/UserDB.php";
        $password = $_POST["password"];
        $hashed_password = hash("SHA512", $password);
        $result = UserDB::checkUserLogin($hashed_password, $_POST["username"]);
        if($result->username == $_POST["username"]){
            $data["success"] = true;
        }

    } else { $data["error"] = "Not al values are set";}
} else {
    $data["error"] = $_POST . "has no value";
}



if($result == true) {
    session_start();
    $_SESSION["user"] = $_POST["username"];
    $_SESSION["userid"] = $result->userId;

    if (isset($_POST["staylogged"])) {
        if ($_POST["staylogged"] === "OK") {
            //16years
            setcookie("UserIdCookie", $result->userId, time() + 60 * 60 * 24 * 6004, "/");
            setcookie("UserCookie", $result->username, time() + 60 * 60 * 24 * 6004, "/");
        } else {
            //3hours
            setcookie("UserIdCookie", $result->userId, time() + 60 * 60 * 2, "/");
            setcookie("UserCookie", $result->username, time() + 60 * 60 * 2, "/");
        }
    }
}
echo json_encode($data);

?>

任何有用的信息都会有所帮助。理想的情况是有人可以告诉我为什么他不加载headerlogin.php。

1 个答案:

答案 0 :(得分:0)

首先,请执行以下常规检查:

  1. 请确保在调用任何会话之前调用session_start();。因此,一个安全的选择是将其放在页面的开头,紧接着在打开<?php声明之后,再放在其他任何地方。此外,请确保在打开<?php声明之前没有空格/制表符。
  2. header重定向之后,使用exit();结束当前脚本(其他人也建议使用session_write_close();session_regenerate_id(true),您也可以尝试使用这些脚本,但是我想使用exit();
  3. 确保在用于测试它的浏览器中启用了cookie。
  4. 确保register_globals已关闭,您可以在php.ini文件上进行检查,也可以使用phpinfo()进行检查。有关如何关闭它的信息,请参阅[this] [1]。
  5. 确保您没有删除或清空会话
  6. 确保您的$_SESSION超全局数组中的键不会在任何地方被覆盖
  7. 确保您重定向到同一域。因此,从www.yourdomain.com重定向到yourdomain.com不会继续进行会话。
  8. 确保您的文件扩展名为.php(确实如此!)

https://stackoverflow.com/a/17242347/3739838