PHP会话脚本半功能


PHP Session Script Semi-Functional

我昨天在这里发了一个问题,得到了快速的回应。大社区!

我希望有人能帮助启发我(一个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();在我的登录页面。这就解决了问题。现在我的页面加载一致和快速。谢谢大家的帮助!