是否通过内部类引用启动会话?

时间:2013-08-15 14:00:29

标签: php session

我有一个PHP类,我正在创建,它将与$_SESSION超级全局一起工作,但是进一步思考工作环境。我决定在调用类时不使用__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等于true或{{1} }

我正在调用false并验证回复。

早一点,我说我希望它迁移到可能已经调用session_status()的网站,验证会话是否已被调用的最佳方法是什么?..我想要的最后一件事要做的这个类,是在导入和初始化类

时开始抛出错误

1 个答案:

答案 0 :(得分: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;
    }
}