diff --git a/library/think/Session.php b/library/think/Session.php index 1b419763..ee43bb77 100644 --- a/library/think/Session.php +++ b/library/think/Session.php @@ -17,6 +17,7 @@ use think\exception\ClassNotFoundException; class Session { protected static $prefix = ''; + protected static $init = null; /** * 设置或者获取session作用域(前缀) @@ -98,6 +99,22 @@ class Session } if ($isDoStart) { session_start(); + self::$init = true; + } else { + self::$init = false; + } + } + + /** + * session自动启动或者初始化 + * @return void + */ + public static function boot() + { + if (is_null(self::$init)) { + self::init(); + } elseif (false === self::$init) { + session_start(); } } @@ -110,7 +127,8 @@ class Session */ public static function set($name, $value = '', $prefix = null) { - !isset($_SESSION) && self::init(); + empty(self::$init) && self::boot(); + $prefix = !is_null($prefix) ? $prefix : self::$prefix; if (strpos($name, '.')) { // 二维数组赋值 @@ -135,7 +153,7 @@ class Session */ public static function get($name = '', $prefix = null) { - !isset($_SESSION) && self::init(); + empty(self::$init) && self::boot(); $prefix = !is_null($prefix) ? $prefix : self::$prefix; if ('' == $name) { // 获取全部的session @@ -167,7 +185,7 @@ class Session */ public static function delete($name, $prefix = null) { - !isset($_SESSION) && self::init(); + empty(self::$init) && self::boot(); $prefix = !is_null($prefix) ? $prefix : self::$prefix; if (strpos($name, '.')) { list($name1, $name2) = explode('.', $name); @@ -192,7 +210,7 @@ class Session */ public static function clear($prefix = null) { - !isset($_SESSION) && self::init(); + empty(self::$init) && self::boot(); $prefix = !is_null($prefix) ? $prefix : self::$prefix; if ($prefix) { unset($_SESSION[$prefix]); @@ -209,7 +227,7 @@ class Session */ public static function has($name, $prefix = null) { - !isset($_SESSION) && self::init(); + empty(self::$init) && self::boot(); $prefix = !is_null($prefix) ? $prefix : self::$prefix; if (strpos($name, '.')) { // 支持数组 @@ -240,6 +258,7 @@ class Session } session_unset(); session_destroy(); + self::$init = null; } /** @@ -260,5 +279,6 @@ class Session { // 暂停session session_write_close(); + self::$init = false; } }