1

我有一个我正在创建的 PHP 类,它将与$_SESSIONSuper global 一起使用,但对工作环境进行了更深入的思考。我决定在__construct调用类时不使用 来启动会话,而是将其留给:$Class->init();

我希望该类能够迁移到已经调用过的网页session_start...再次,回到session_start()构造函数之外。我的代码如下:

class Session { 
        protected $Session_Started = false; 

    public function init(){
        if ($this->Session_Started === false){
            session_start();
            $this->Session_Started = true;
            return true;
        }
        return false;
    }
    public function Status_Session(){
        $Return_Switch = false; 
        if (session_status() === 1){
            $Return_Switch = "Session Disabled";
        }elseif (session_status() === 2){
            $Return_Switch = "Session Enabled, but no sessions exist";
        }elseif (session_status() === 3){
            $Return_Switch = "Session Enabled, and Sessions exist";
        }
        return $Return_Switch;
    }
   /*Only shown necessary code, the entire class contents is irrelevant to the question topic */

随着代码的显示..很明显,我正在验证会话之前是否已通过两种方法调用过,内部引用:$this->Session_Started等于truefalse

我也在打电话session_status()并验证响应。

早些时候,我说我希望它迁移到可能已经调用过的站点,session_start()验证会话是否已被调用的最佳方法是什么?..我希望这个类做的最后一件事是开始抛出导入和初始化类时出错

4

1 回答 1

1

您需要将它与“会话已开始”检查结合起来。

public function init()
{
    if ($this->Session_Started) {
        return true;
    }

    if (session_status() === PHP_SESSION_ACTIVE) {
        $this->Session_Started = true;
        return true;
    }

    if ($this->Session_Started === false) {
        session_start();
        $this->Session_Started = true;
        return true;
    }
    return false;
}

或者在构造函数中:

public function __construct()
{
    if (session_status() === PHP_SESSION_ACTIVE) {
        $this->Session_Started = true;
    }
}
于 2013-08-15T14:51:28.993 回答