我有一个管理页面 (../index2.php) 我想在第一次打开浏览器时以我的主页 URL 登录。您必须使用用户名和密码登录才能查看此页面。显然,如果我注销并关闭浏览器,然后重新打开,它应该重定向到登录页面。这是 index2.php 页面首次打开时的顶部代码:
<?php
require_once ("../includes_kl/initialize.php"); // simply sets up database and other classes including session class
?>
<?php
if(!$session->is_logged_in()) {
redirect_to("/cms/login.php");
}
?>
它将重定向到 login.php 页面,但该页面执行以下操作:
require_once ("../../includes_kl/initialize.php");
if ($session->is_logged_in()) {// Skip login page if already logged in.
redirect_to("index.php");
}
而且因为我现在显然已登录(不确定何时发生),所以它转到 index.php。
当我打开浏览器时,我确认我的 cookie 已设置。cookie 会这样做:
private function check_login() {
if (isset($_COOKIE['user_id']) && (isset($_COOKIE['username']))) {
$_SESSION['user_id']= $_COOKIE['user_id'];
$_SESSION['username'] = $_COOKIE['username'];
}
if (isset($_SESSION['user_id'])) {
$this->user_id = $_SESSION['user_id'];
$this->username = $_SESSION['username'];
$this->logged_in = true;
} else {
unset($this->user_id);
$this->logged_in = false;
}
}
My session Constructor:
function __construct() {
session_start();
$this->check_login();
}
更新:我将此代码添加到回显变量:
function __construct() {
session_start();
$this->check_login();
if ($this->logged_in) {
echo "Session User Success: " . $this->username;
} else {
echo "Session User Fail";
}
}
当我第一次打开浏览器时,它返回“会话用户失败”(我在 index2.php 中出于测试目的取消了重定向,所以我可以看到结果)。
更新2:
我已经找到了未设置 Cookie 的问题。
这是我设置它们的地方:
public function login($user) {
global $database;
if ($user) {
$this->user_id = $_SESSION['user_id'] = $user->id;
$this->username = $_SESSION['username'] = $user->username;
setcookie('user_id', $this->user_id, time() + (60 * 60 * 24 * 14));
setcookie('username', $this->username, time() + (60 * 60 * 24 * 14));
$this->logged_in = true;
}
}
这样做是否正确?这是用户登录时的一部分。我已经在 Chrome 中验证了 cookie 已设置。然而,在 check_login() 方法中,它在第一个“if”语句中找不到它们。“isset”测试失败。