【发布时间】:2013-06-19 03:25:31
【问题描述】:
我昨天在这里发布了一个问题并得到了快速回复。很棒的社区!
我希望有人能帮助我(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");
谁能看出哪里出了问题?
【问题讨论】:
-
session_write_close()在您的return声明之后。该行不会被执行。 -
我明白了。我在两个函数logged_in() 和session_expired() 中有两次。在试图弄清楚为什么我的页面有时在第一次尝试时无法加载时,我根据一些研究添加了此内容。