昨日ここに質問を投稿したところ、迅速な回答が得られました。素晴らしいコミュニティです!
以下のスクリプトと、その実行が一貫していない理由について、誰かが私 (PHP の初心者) を啓発するのを手伝ってくれることを願っています。
次の session.php ファイルを使用して、ログインとセッションのタイムアウトを確認しています。
`
function logged_in() {
return isset($_SESSION['user_id']);
session_write_close();
}
function session_expired() {
$now = time();
$limit = $now - 7200; // 2 hour
return isset($_SESSION['last_activity']) && ($_SESSION['last_activity'] < $limit);
session_write_close();
}
function confirm_logged_in() {
$now = time();
if (session_expired()) {
$_SESSION = array();
if(isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
redirect_to("http://domain.com/login.php?logout=2");
exit;
}
elseif (!logged_in()) {
redirect_to("http://domain.com/login.php");
exit;
}
else {
$_SESSION['last_activity'] = $now;
session_write_close();
}
}
?>`
各ページの上部には、次のものがあります。
<?php require_once("../includes/session.php"); ?>
<?php require_once("../includes/functions.php"); ?> defines some other functions I use
<?php confirm_logged_in(); ?>
何が起こっているかというと、session_expired() が常にトリガーされるとは限らず、redirect_to(" http://domain.com/login.php?logout=2 ");の代わりに発生します。redirect_to(" http://domain.com/login.php ");に移動します。
誰が何が間違っているかを見ることができますか?