从文件切换到会话变量后,这些功能不起作用

时间:2017-12-19 17:13:27

标签: php file session

我有两种方法可以正常工作

public static function appendGamer($gamer) {
    file_put_contents(self::$fileName, $gamer, FILE_APPEND);
}

    private function selectLastGamer() {
        $gamers = file(self::$fileName);
        if (sizeof($gamers) > self::$totalGamers) {
            self::$totalGamers = sizeof($gamers);
            return trim($gamers[self::$totalGamers - 1]);
        }
        return "";
    }

现在我希望所有内容都存储在会话变量中而不是传统的文本文件中。所以我按照以下方式重写这些功能

public static function appendGamer($gamer) {
    $old = trim($_SESSION["gamers"]);
    $_SESSION["gamers"] = ($old == "") ? $gamer : $old . PHP_EOL . $gamer;
}

 private function selectLastGamer() {
        $gamers = explode(PHP_EOL, $_SESSION["gamers"]);
        if (sizeof($gamers) > self::$totalGamers) {
            self::$totalGamers = sizeof($gamers);
            return trim($gamers[self::$totalGamers - 1]);
        }
       return "";
    }

但现在这些功能不起作用。我的意思是现在selectLastGamer总是返回空字符串。会话变量在构造函数中自动创建,因此始终设置它。新版本的这些功能出了什么问题?

2 个答案:

答案 0 :(得分:1)

使用页面顶部的session_start();在您要访问会话变量set / get的每个页面上启动会话。

在主页面上以及定义功能的页面上。

答案 1 :(得分:1)

您应该在每个页面上开始会话,例如

if( session_status() != PHP_SESSION_DISABLED )
{
    session_start();
}

OR

if( session_status() == PHP_SESSION_NONE || session_status() == PHP_SESSION_ACTIVE)
{
    session_start();
}

因为session_status()一次返回以下任何一个值。

如果会话被禁用,则为PHP_SESSION_DISABLED。

PHP_SESSION_NONE如果会话已启用但不存在。

PHP_SESSION_ACTIVE如果启用了会话,则存在一个。

希望它能为你效劳。