我想要一个解决方案,当我第一次在我的每个php文件中使用变量$_SESSION
时,自动调用函数session_start()
。否则没有。
我可以在auto-prepend-file
中调用它或使用session.auto_start
,但是当我不在文件中使用会话时,我会阻止任何开销过程。
答案 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
这是所有人的自动启动,但这并不意味着它会产生开销