我昨天在这里发了一个问题,得到了快速的回应。大社区!
我希望有人能帮助启发我(一个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");
有谁能看出哪里不对吗?
在几个不同的地方,return
之后是session_write_close()
。return
语句总是函数中执行的最后一个内容。
另外,为了确保,您正在调用session_start()
来实际启动会话,对吗?
所以,我采纳了好心的人的建议,他们建议我从代码部分删除session_write_close()。好建议!
然而,这并没有解决我的问题。当我在网站上移动时,我的页面仍然无法加载,这种情况只是偶尔发生。
原来我需要设置$_SESSION['last_activity'] = time();在我的登录页面。这就解决了问题。现在我的页面加载一致和快速。谢谢大家的帮助!