【问题标题】:Can't set value to $_SESSION variable in MVC model无法在 MVC 模型中为 $_SESSION 变量设置值
【发布时间】:2026-01-08 09:00:01
【问题描述】:

我正在尝试在代码点火器的模型中创建一个持久会话变量。 这是课程开始前我模型顶部的内容:

session_start();
$_SESSION['userscore'];

在类里面我有这两个功能: 第一个我试图将当前分数设置为会话变量,以便稍后我可以在第二个函数中调用它并返回当前总分数。分数达到函数 setscore。 我只是无法理解如何使用该值在页面顶部设置变量。我认为变量 session 是全局的。有什么建议?谢谢

function setscore($score){
        $_SESSION['userscore'] = $score;

}
function getscore(){
        $totalscore = $_SESSION['userscore'];
        return $totalscore;
}

【问题讨论】:

    标签: php codeigniter session model-view-controller model


    【解决方案1】:

    您不必手动初始化会话并访问超全局 $_SESSION。 CodeIgniter 已经为你使用 session 让路了。只需在您的控制器中像这样使用:

    class MyController extends CI_Controller {
        public function index() {
            //load the session library
            $this->load->driver('session');
    
            //set custom field
            $this->session->set_userdata('name', 'david');
    
            //get custom field
            $this->session->userdata('name');
    
            //unset field
            $this->session->unset_userdata('name');
        }
    }
    

    如果您使用的是框架,请坚持使用框架提供的内容以及框架建议的一些最佳实践。

    问候,

    【讨论】:

    • 我试图在我的模型中拥有一个持久变量,并被告知使用会话。有没有其他方法可以存储问题的分数并添加到总分中,直到用户决定停止玩测验?
    • @Otonel 另一种方法是使用数据库引用,但会话会容易得多。
    • @Otonel 我还建议为此使用会话。请注意,每个问题的分数虽然需要携带到下一个请求,但对于几个请求来说只是暂时的。这最适合会话变量。存储在数据库中也可以,但它适用于持续很长时间的东西。在您的情况下,每场比赛的总分会更好地存储在数据库中。问候,