我想要一个解决方案,当我第一次$_SESSION
在我的每个 php 文件中使用该变量时,该函数session_start()
会被自动调用。否则不是。
我可以调用它auto-prepend-file
或使用它session.auto_start
,但是当我不在文件中使用会话时,我会阻止任何开销过程。
简短的回答:你不能。
但是您可以将会话功能包装在一个类中,并在会话类中处理会话的开始。
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');
创建一个 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;
}
}
如果要自动启动会话,则必须在 php.ini 文件中找到以下行并将值从 0 更改为 1 并重新启动服务器。
session.auto_start = 1
或在 htaccess
php_value session.auto_start 1
这是所有人的自动启动,但这并不意味着它会产生开销