首次使用时自动启动会话

时间:2013-02-23 11:02:19

标签: php session

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

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

3 个答案:

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

答案 1 :(得分:1)

创建一个Session类并使用Singleton Pattern实例化它:

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;
  }
}

答案 2 :(得分:0)

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

session.auto_start = 1

或在htaccess

php_value session.auto_start 1

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