【问题标题】:Page won't save $_SESSION after declaring it [duplicate]页面在声明后不会保存 $_SESSION [重复]
【发布时间】:2019-08-06 20:30:11
【问题描述】:

因此,对于一个学校项目,我正在尝试制作一个登录页面,如果用户在登录时可以查看其他页面。到目前为止,我可以让用户创建一个帐户并从数据库中获取数据。但是,当我刷新页面以转到其他页面所在的不同 .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>

登录


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。

【问题讨论】:

  • 您的session_start 电话在哪里?
  • 对不起,我在为布局而苦恼。我已将 session_start() 放在 dologin.php 中
  • 如建议的副本中所示,您需要在要使用$_SESSION每个文件中使用session_start(),并且需要调用它在使用全局之前。

标签: javascript php jquery


【解决方案1】:

首先,进行这些常规检查:

  1. 确保在调用任何会话之前调用session_start();。因此,一个安全的选择是将其放在页面的开头,紧接在开头的&lt;?php 声明之后,然后再放置其他任何内容。还要确保在打开 &lt;?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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多