我想要一个解决方案,当我在每个php文件中首次使用变量$_SESSION
时,函数session_start()
被自动调用。否则不。第一次使用时自动启动会话
我可以在auto-prepend-file
中调用它或使用session.auto_start
,但是当我不使用文件中的会话时,我将防止任何开销过程。
我想要一个解决方案,当我在每个php文件中首次使用变量$_SESSION
时,函数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()
或$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');
创建一个会话类和使用Singleton模式实例是:
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
它能够自动开始为所有,但并不意味着它创建开销
创建一个包装类围绕'$ _SESSION'。不要直接使用'$ _SESSION',而是使用'$ mySessionWrapper-> set('foo','bar')''。然后你可以实现你想要的任何会话开始逻辑。 – deceze 2013-02-23 11:06:20