0

我想要一个解决方案,当我第一次$_SESSION在我的每个 php 文件中使用该变量时,该函数session_start()会被自动调用。否则不是。

我可以调用它auto-prepend-file或使用它session.auto_start,但是当我不在文件中使用会话时,我会阻止任何开销过程。

4

3 回答 3

1

简短的回答:你不能。

但是您可以将会话功能包装在一个类中,并在会话类中处理会话的开始。

class Session {

    public function __construct() {
        session_start();
    }

    public function set($k, $v) {
        $_SESSION[$k] = $v;
    }

    ...

}

用法将是:

$session = new Session();
$session->set('key', 'value');

否则,还有另一个丑陋的解决方案可以让您省去session_start()or$session = new Session();行:创建一个静态类,例如:

class Session {

    private static $inited = false;

    public static function check() {
        if (!$inited) {
            session_start();
            $inited = true;
        }
    }

    public static function set($k, $v) {
        self::check();
        $_SESSION[$k] = $v;
    }

    ...

}

那么您只需创建所有self::check()在开始时调用的方法,如果尚未初始化,它将启动会话。用法很简单:

Session::set('key', 'value');
于 2013-02-23T11:06:54.360 回答
1

创建一个 Session 类并使用单例模式对其进行实例化:

class Session {
  private function __construct() {
    session_start();
  }

  private static $instance = false;
  public static function getInstance() {
    if(self::$instance == false) {
      self::$instance == new Session();
    }
    return self::$instance;
  }
}
于 2013-02-23T11:07:23.137 回答
0

如果要自动启动会话,则必须在 php.ini 文件中找到以下行并将值从 0 更改为 1 并重新启动服务器。

session.auto_start = 1

或在 htaccess

php_value session.auto_start 1

这是所有人的自动启动,但这并不意味着它会产生开销

于 2013-02-24T17:19:57.020 回答