改进Session类

This commit is contained in:
thinkphp
2016-08-20 11:50:21 +08:00
parent e7e79f4c78
commit 684ed543a6

View File

@@ -17,6 +17,7 @@ use think\exception\ClassNotFoundException;
class Session class Session
{ {
protected static $prefix = ''; protected static $prefix = '';
protected static $init = null;
/** /**
* 设置或者获取session作用域前缀 * 设置或者获取session作用域前缀
@@ -98,6 +99,22 @@ class Session
} }
if ($isDoStart) { if ($isDoStart) {
session_start(); 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) public static function set($name, $value = '', $prefix = null)
{ {
!isset($_SESSION) && self::init(); empty(self::$init) && self::boot();
$prefix = !is_null($prefix) ? $prefix : self::$prefix; $prefix = !is_null($prefix) ? $prefix : self::$prefix;
if (strpos($name, '.')) { if (strpos($name, '.')) {
// 二维数组赋值 // 二维数组赋值
@@ -135,7 +153,7 @@ class Session
*/ */
public static function get($name = '', $prefix = null) public static function get($name = '', $prefix = null)
{ {
!isset($_SESSION) && self::init(); empty(self::$init) && self::boot();
$prefix = !is_null($prefix) ? $prefix : self::$prefix; $prefix = !is_null($prefix) ? $prefix : self::$prefix;
if ('' == $name) { if ('' == $name) {
// 获取全部的session // 获取全部的session
@@ -167,7 +185,7 @@ class Session
*/ */
public static function delete($name, $prefix = null) public static function delete($name, $prefix = null)
{ {
!isset($_SESSION) && self::init(); empty(self::$init) && self::boot();
$prefix = !is_null($prefix) ? $prefix : self::$prefix; $prefix = !is_null($prefix) ? $prefix : self::$prefix;
if (strpos($name, '.')) { if (strpos($name, '.')) {
list($name1, $name2) = explode('.', $name); list($name1, $name2) = explode('.', $name);
@@ -192,7 +210,7 @@ class Session
*/ */
public static function clear($prefix = null) public static function clear($prefix = null)
{ {
!isset($_SESSION) && self::init(); empty(self::$init) && self::boot();
$prefix = !is_null($prefix) ? $prefix : self::$prefix; $prefix = !is_null($prefix) ? $prefix : self::$prefix;
if ($prefix) { if ($prefix) {
unset($_SESSION[$prefix]); unset($_SESSION[$prefix]);
@@ -209,7 +227,7 @@ class Session
*/ */
public static function has($name, $prefix = null) public static function has($name, $prefix = null)
{ {
!isset($_SESSION) && self::init(); empty(self::$init) && self::boot();
$prefix = !is_null($prefix) ? $prefix : self::$prefix; $prefix = !is_null($prefix) ? $prefix : self::$prefix;
if (strpos($name, '.')) { if (strpos($name, '.')) {
// 支持数组 // 支持数组
@@ -240,6 +258,7 @@ class Session
} }
session_unset(); session_unset();
session_destroy(); session_destroy();
self::$init = null;
} }
/** /**
@@ -260,5 +279,6 @@ class Session
{ {
// 暂停session // 暂停session
session_write_close(); session_write_close();
self::$init = false;
} }
} }