【发布时间】: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,即使我没有登录。 -
显示您第一次设置该变量的代码
-
我在上面添加了一些代码的外观