1

私は作成中のPHPクラスを持っています。これは$_SESSIONスーパーグローバルで動作しますが、作業環境についてもう少し考えています。クラスが呼び出されたときにセッションを開始するために を使用しないことに決めました__constructが、: のままにしました$Class->init();

クラスに、既に呼び出されている Web ページに移行する機能を持たせたいと考えています ... 繰り返しますが、コンストラクター関数session_startの out を残すことに戻ります。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コードが表示されている..セッションが以前に2つのメソッド、内部参照によって呼び出されたtrueかどうかを検証していることは明らかです。false

また、応答を呼び出し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 に答える