1

我昨天在这里发布了一个问题并得到了快速回复。很棒的社区!

我希望有人可以帮助启发我(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 ”);

谁能看到可能出了什么问题?

4

2 回答 2

0

在几个不同的地方,你有session_write_close()一个return. return语句始终是函数中执行的最后一件事。

另外,只是为了确保您打电话是session_start()为了真正开始一个会话,对吧?

于 2013-06-19T03:35:28.250 回答
0

因此,我听取了建议我从代码部分中删除 session_write_close() 的好人的建议。很好的建议!

然而,这并没有解决我的问题。在网站上移动时,我的页面仍然没有加载,这种情况只是偶尔发生。

原来我需要设置 $_SESSION['last_activity'] = time(); 在我的登录页面中。这解决了问题。现在我的页面加载一致且快速。谢谢大家的帮助!

于 2013-06-20T08:40:22.110 回答