管理ページ (../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 が設定されていることを確認します。そしてクッキーはこれを行います:
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";
}
}
ブラウザを最初に開いたときに「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;
}
}
これは正しく行われていますか?これは、ユーザーがログインしているときの一部です。Cookie が設定されていることを Chrome で確認しました。それでも、check_login() メソッドでは、最初の "if" ステートメントでそれらを見つけられません。「isset」テストは失敗します。