PHP $ _SESSION变量第一次不起作用

时间:2016-09-13 01:25:27

标签: php session redirect

$_SESSION['isloggedin']似乎没有在第一次加载时工作 这只发生在服务器上,而不是发生在localhost上 session_start()位于每个页面的顶部。

初始化为:$_SESSION['isloggedin'] = false;

当用户登录$_SESSION['isloggedin'] = true;时 用户退出时$_SESSION['isloggedin'] = false;

on home.php:

if (!$_SESSION['isloggedin']) {
  die(header("Location: login.php"));
}

在login.php上:

if ($_SESSION['isloggedin']) {
  die(header("Location: home.php"));
}

当您登录并发送到主页$_SESSION['isloggedin']时,似乎不是真的,因此它会重定向到login.php。但是因为它确实是重定向到Home.php导致重定向循环。

当弹出重定向循环错误时,我刷新并进入正确的页面。有时页面会自动刷新并将我带到正确的页面,之前仍然显示重定向错误。

为什么没有$ _SESSION变量在服务器上正常工作?正确的值似乎不是第一次在每个页面,每个站点链接上注册。

编辑:

一切都在localhost上按预期工作,而不是在在线服务器上。
当点击登录并且所有内容都通过时,将调用类登录功能:

class users {

    $_SESSION['isLoggedIn'] = false;

    function __construct() {
        if (session_id() == "") {
            session_start();
        }

        if (isset($_SESSION['isLoggedIn']) && $_SESSION['isLoggedIn'] == true) {
            if (session_id() == '') {
                session_start();
            }
        }
    }

    function login($user,$password) {
        if (session_id() == "") {
            session_start();
        }
        $_SESSION['isLoggedIn'] = false;

        $mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
        if ($mysqli->connect_errno) {
            return false;
        }

        $user = $mysqli->real_escape_string($user);
        $password = $mysqli->real_escape_string($password);
        $query = "SELECT * from users WHERE email=$user";

        if (!$result = $mysqli->query($query)) {
            return false;
        }

        $row = $result->fetch_assoc();
        $db_pass = $row['password'];

        if (crypt($password,$db_pass) != $db_pass) {
            return false;
        }

        $_SESSION['isLoggedIn'] = true;

        if (session_id() == '') {
            session_start();
        }
        return true;
    } 

}

2 个答案:

答案 0 :(得分:1)

尝试将代码更改为此类

if (!isset($_SESSION['isloggedin'])) {

  header("Location: login.php");

} else {

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

答案 1 :(得分:0)

我使用AWS Elastic Beanstalk来运行此Web应用程序。我没有想到这件事,但显然确实如此。事实证明,由于您要分割服务器,会话的工作方式与在localhost上的工作方式相同。我需要在负载均衡器中启用粘性会话。