我想要一個解決方案,當我在每個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