1

我正在编写一个简单的网站 php/jquery/mysql 等。目前我有一个非常简单的登录系统,一旦用户登录,就会设置一个会话变量,该变量被引用以确认他们是否仍在其他页面上登录. 代码是:

$_SESSION['logged_in'] = TRUE;
$_SESSION['member_id'] = $member_id_for_session;
$_SESSION['handle'] = $user_handle;

我在 util 文件中有多种函数可以利用它,例如:

function echoUserHandle() {
    if (isset($_SESSION['handle'])) {
        echo "Welcome " . $_SESSION['handle'];
    } else {
        echo "You are not logged in";
    }
}

function checkLoggedIn() {

if (isset($_SESSION['logged_in'])) {
    return TRUE;
} else {
    return FALSE;
}
}

这在我的 Mac 上使用 chrome 的 MAMP 服务器上运行良好,但是当我将它推送到远程服务器时,即使在我用来开发的同一浏览器上,我也会得到不一致的数据视图。我看到这一点只是因为某些页面显示状态“您未登录”,而有些页面显示正确的用户 ID。

此外,一旦用户注销,会话将被完全销毁:

        unset($_SESSION['logged_in']);
        unset($_SESSION['member_id']);
        unset($_SESSION['handle']);
        $_SESSION = array();

        if (ini_get("session.use_cookies")) {
            error_log("unsetting cookie:" . session_name(), 0);
            $params = session_get_cookie_params();
            error_log("cookie params:" . $params, 0);
            setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
        }

        session_destroy();

这可能有点矫枉过正,但是当我在某些页面上以其他用户身份重新登录时,它仍会显示以前登录的用户。这表明会话有问题,不是吗?

任何人都可以提出一种调试方法,我在其他领域做了很多开发,但 php 对我来说仍然是新的。

非常感谢

4

0 回答 0