【问题标题】:PHP $_SESSION variable not working first timePHP $_SESSION 变量第一次不工作
【发布时间】:2023-03-05 03:15:01
【问题描述】:

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

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

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

在 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 变量不能在服务器上正常工作?正确的值似乎不是第一次在每个页面、每个站点链接上注册。

编辑:

在本地主机上一切正常,只是在在线服务器上不行。
当点击登录并且一切都通过类登录函数时:

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;
    } 

}

【问题讨论】:

  • if (!isset($_SESSION['isloggedin']))if (isset($_SESSION['isloggedin'])) 试试这个
  • die() 中的标头实际上有效吗?
  • 我用 isset 试过了。同样的问题。由于$_SESSION['isloggedin'] 已初始化,我得到重定向循环。未初始化我被重定向到 home.php,即使我没有登录。
  • 显示您第一次设置该变量的代码
  • 我在上面添加了一些代码的外观

标签: php session redirect


【解决方案1】:

试着把你的代码改成这样的

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

  header("Location: login.php");

} else {

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

【讨论】:

  • 这会将我直接引导至 home.php,而无需登录显示任何用户内容。
  • 在登录的地方显示你的代码,因为我不知道你在哪里返回true显示你的查询和整个过程,我们不会窃取你的代码
【解决方案2】:

我使用 AWS Elastic Beanstalk 来运行这个 Web 应用程序。我没有想到这件事,但显然它确实发生了。事实证明,会话的工作方式与在 localhost 上的工作方式不同,因为您正在划分服务器。我需要在负载均衡器中启用粘性会话。

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多