会话开始不起作用

时间:2018-04-29 15:48:24

标签: php session

有人可以帮帮我吗?会话开始不起作用。我究竟做错了什么? 错误消息是致命错误:未捕获错误:在null上调用成员函数increment_index()

这是我的index.php

<?php

require 'config/bootstrap.php';

get_header();

$_SESSION = get_session_start_values();

dd($_SESSION['quiz']->increment_index());

render_fragment( 'quiz' );

get_footer();

这是我的引导程序文件

<?php
session_start();
require 'quiz.php';
require 'helpers.php';
require 'database.php';

在我的帮手中,我使用了这个:

function get_session_start_values() {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        return  [
            'quiz' => new Quiz(),
            'yes_no_questions' => 'yes_no_questions',
            'end_game' => false
        ];
    }
}

2 个答案:

答案 0 :(得分:4)

由于这一行,它只能工作一次:

if ( ! isset( $_SESSION['quiz'] ) ) {

第二次,

$_SESSION = get_session_start_values();

$_SESSION设置为null

这应该解决它:

function get_session_start_values() {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        return  [
            'quiz' => new Quiz(),
            'yes_no_questions' => 'yes_no_questions',
            'end_game' => false
        ];
    }
    return $_SESSION;
}

答案 1 :(得分:2)

$_SESSION是超级全球性的。也就是说,您可以随处使用它来访问会话。这包括您设置会话初始值的功能:

function get_session_start_values() {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        return  [
            'quiz' => new Quiz(),
            'yes_no_questions' => 'yes_no_questions',
            'end_game' => false
        ];
    }
}

不是要求起始值,只需在需要时进行初始化:

function init_session_values(): void {
    if ( ! isset( $_SESSION['quiz'] ) ) {
        $_SESSION['quiz'] = new Quiz();
    }
    ...
}

然后在你的意思是调用函数。你不需要处理任何返回值。

<?php

require 'config/bootstrap.php';

init_session_values();

get_header();

使用起来更为直接,$_SESSION更容易实现(轻松超全局访问)。