$_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;
}
}
答案 0 :(得分:1)
尝试将代码更改为此类
if (!isset($_SESSION['isloggedin'])) {
header("Location: login.php");
} else {
header("Location: home.php");
}
答案 1 :(得分:0)
我使用AWS Elastic Beanstalk来运行此Web应用程序。我没有想到这件事,但显然确实如此。事实证明,由于您要分割服务器,会话的工作方式与在localhost上的工作方式相同。我需要在负载均衡器中启用粘性会话。