Merge pull request #198 from zhylninc/session_test

1. fix session_start() step to end
This commit is contained in:
ThinkPHP
2016-01-14 22:52:38 +08:00

View File

@@ -10,243 +10,260 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace think; namespace think;
class Session { class Session
protected static $prefix = ''; {
/** protected static $prefix = '';
* 设置或者获取session作用域前缀
* /**
* @param string $prefix * 设置或者获取session作用域前缀
* @return string|void *
*/ * @param string $prefix
public static function prefix($prefix = '') { * @return string|void
if (empty ( $prefix ) && $prefix !== null) { */
return self::$prefix; public static function prefix($prefix = '')
} else { {
self::$prefix = $prefix; if (empty($prefix) && $prefix !== null) {
} return self::$prefix;
} } else {
self::$prefix = $prefix;
/** }
* session初始化 }
*
* @param array $config /**
* @return void * session初始化
*/ *
public static function init($config = []) { * @param array $config
if (isset ( $config ['use_trans_sid'] )) { * @return void
ini_set ( 'session.use_trans_sid', $config ['use_trans_sid'] ? 1 : 0 ); */
} public static function init($config = [])
{
// 启动session $isDoStart = false;
if (! empty ( $config ['auto_start'] ) && PHP_SESSION_ACTIVE != session_status ()) { if (isset($config['use_trans_sid'])) {
ini_set ( 'session.auto_start', 0 ); ini_set('session.use_trans_sid', $config['use_trans_sid'] ? 1 : 0);
session_start (); }
}
// 启动session
if (isset ( $config ['prefix'] )) { if (! empty($config['auto_start']) && PHP_SESSION_ACTIVE != session_status()) {
self::$prefix = $config ['prefix']; ini_set('session.auto_start', 0);
} $isDoStart = true;
if ($config ['var_session_id'] && isset ( $_REQUEST [$config ['var_session_id']] )) { }
session_id ( $_REQUEST [$config ['var_session_id']] );
} elseif (isset ( $config ['id'] ) && ! empty ( $config ['id'] )) { if (isset($config['prefix'])) {
session_id ( $config ['id'] ); self::$prefix = $config['prefix'];
} }
if (isset ( $config ['name'] )) { if ($config['var_session_id'] && isset($_REQUEST[$config['var_session_id']])) {
session_name ( $config ['name'] ); session_id($_REQUEST[$config['var_session_id']]);
} } elseif (isset($config['id']) && ! empty($config['id'])) {
if (isset ( $config ['path'] )) { session_id($config['id']);
session_save_path ( $config ['path'] ); }
} if (isset($config['name'])) {
if (isset ( $config ['domain'] )) { session_name($config['name']);
ini_set ( 'session.cookie_domain', $config ['domain'] ); }
} if (isset($config['path'])) {
if (isset ( $config ['expire'] )) { session_save_path($config['path']);
ini_set ( 'session.gc_maxlifetime', $config ['expire'] ); }
ini_set ( 'session.cookie_lifetime', $config ['expire'] ); if (isset($config['domain'])) {
} ini_set('session.cookie_domain', $config['domain']);
}
if (isset ( $config ['use_cookies'] )) { if (isset($config['expire'])) {
ini_set ( 'session.use_cookies', $config ['use_cookies'] ? 1 : 0 ); ini_set('session.gc_maxlifetime', $config['expire']);
} ini_set('session.cookie_lifetime', $config['expire']);
if (isset ( $config ['cache_limiter'] )) { }
session_cache_limiter ( $config ['cache_limiter'] );
} if (isset($config['use_cookies'])) {
if (isset ( $config ['cache_expire'] )) { ini_set('session.use_cookies', $config['use_cookies'] ? 1 : 0);
session_cache_expire ( $config ['cache_expire'] ); }
} if (isset($config['cache_limiter'])) {
if (! empty ( $config ['type'] )) { session_cache_limiter($config['cache_limiter']);
// 读取session驱动 }
$class = (! empty ( $config ['namespace'] ) ? $config ['namespace'] : '\\think\\session\\driver\\') . ucwords ( $config ['type'] ); if (isset($config['cache_expire'])) {
session_cache_expire($config['cache_expire']);
// 检查驱动类 }
if (! class_exists ( $class ) || ! session_set_save_handler ( new $class () )) { if (! empty($config['type'])) {
throw new \think\Exception ( 'error session handler', 11700 ); // 读取session驱动
} $class = (! empty($config['namespace']) ? $config['namespace'] : '\\think\\session\\driver\\') . ucwords($config['type']);
}
} // 检查驱动类
if (! class_exists($class) || ! session_set_save_handler(new $class())) {
/** throw new \think\Exception('error session handler', 11700);
* session设置 }
* }
* @param string $name if ($isDoStart) {
* session名称 session_start();
* @param mixed $value }
* session值 }
* @param string $prefix
* 作用域(前缀) /**
* @return void * session设置
*/ *
public static function set($name, $value = '', $prefix = '') { * @param string $name
$prefix = $prefix ? $prefix : self::$prefix; * session名称
if (strpos ( $name, '.' )) { * @param mixed $value
// 二维数组赋 * session
list ( $name1, $name2 ) = explode ( '.', $name ); * @param string $prefix
if ($prefix) { * 作用域(前缀)
$_SESSION [$prefix] [$name1] [$name2] = $value; * @return void
} else { */
$_SESSION [$name1] [$name2] = $value; public static function set($name, $value = '', $prefix = '')
} {
} elseif ($prefix) { $prefix = $prefix ? $prefix : self::$prefix;
$_SESSION [$prefix] [$name] = $value; if (strpos($name, '.')) {
} else { // 二维数组赋值
$_SESSION [$name] = $value; list ($name1, $name2) = explode('.', $name);
} if ($prefix) {
} $_SESSION[$prefix][$name1][$name2] = $value;
} else {
/** $_SESSION[$name1][$name2] = $value;
* session获取 }
* } elseif ($prefix) {
* @param string $name $_SESSION[$prefix][$name] = $value;
* session名称 } else {
* @param string $prefix $_SESSION[$name] = $value;
* 作用域(前缀) }
* @return mixed }
*/
public static function get($name = '', $prefix = '') { /**
$prefix = $prefix ? $prefix : self::$prefix; * session获取
if ('' == $name) { *
// 获取全部的session * @param string $name
$value = $prefix ? $_SESSION [$prefix] : $_SESSION; * session名称
} elseif ($prefix) { * @param string $prefix
// 获取session * 作用域(前缀)
if (strpos ( $name, '.' )) { * @return mixed
list ( $name1, $name2 ) = explode ( '.', $name ); */
$value = isset ( $_SESSION [$prefix] [$name1] [$name2] ) ? $_SESSION [$prefix] [$name1] [$name2] : null; public static function get($name = '', $prefix = '')
} else { {
$value = isset ( $_SESSION [$prefix] [$name] ) ? $_SESSION [$prefix] [$name] : null; $prefix = $prefix ? $prefix : self::$prefix;
} if ('' == $name) {
} else { // 获取全部的session
if (strpos ( $name, '.' )) { $value = $prefix ? $_SESSION[$prefix] : $_SESSION;
list ( $name1, $name2 ) = explode ( '.', $name ); } elseif ($prefix) {
$value = isset ( $_SESSION [$name1] [$name2] ) ? $_SESSION [$name1] [$name2] : null; // 获取session
} else { if (strpos($name, '.')) {
$value = isset ( $_SESSION [$name] ) ? $_SESSION [$name] : null; list ($name1, $name2) = explode('.', $name);
} $value = isset($_SESSION[$prefix][$name1][$name2]) ? $_SESSION[$prefix][$name1][$name2] : null;
} } else {
return $value; $value = isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;
} }
} else {
/** if (strpos($name, '.')) {
* 删除session数据 list ($name1, $name2) = explode('.', $name);
* $value = isset($_SESSION[$name1][$name2]) ? $_SESSION[$name1][$name2] : null;
* @param string $name } else {
* session名称 $value = isset($_SESSION[$name]) ? $_SESSION[$name] : null;
* @param string $prefix }
* 作用域(前缀) }
* @return void return $value;
*/ }
public static function delete($name, $prefix = '') {
$prefix = $prefix ? $prefix : self::$prefix; /**
if (strpos ( $name, '.' )) { * 删除session数据
list ( $name1, $name2 ) = explode ( '.', $name ); *
if ($prefix) { * @param string $name
unset ( $_SESSION [$prefix] [$name1] [$name2] ); * session名称
} else { * @param string $prefix
unset ( $_SESSION [$name1] [$name2] ); * 作用域(前缀)
} * @return void
} else { */
if ($prefix) { public static function delete($name, $prefix = '')
unset ( $_SESSION [$prefix] [$name] ); {
} else { $prefix = $prefix ? $prefix : self::$prefix;
unset ( $_SESSION [$name] ); if (strpos($name, '.')) {
} list ($name1, $name2) = explode('.', $name);
} if ($prefix) {
} unset($_SESSION[$prefix][$name1][$name2]);
} else {
/** unset($_SESSION[$name1][$name2]);
* 清空session数据 }
* } else {
* @param string $prefix if ($prefix) {
* 作用域(前缀) unset($_SESSION[$prefix][$name]);
* @return void } else {
*/ unset($_SESSION[$name]);
public static function clear($prefix = '') { }
$prefix = $prefix ? $prefix : self::$prefix; }
if ($prefix) { }
unset ( $_SESSION [$prefix] );
} else { /**
$_SESSION = [ ]; * 清空session数据
} *
} * @param string $prefix
* 作用域(前缀)
/** * @return void
* 判断session数据 */
* public static function clear($prefix = '')
* @param string $name {
* session名称 $prefix = $prefix ? $prefix : self::$prefix;
* @param string $prefix if ($prefix) {
* unset($_SESSION[$prefix]);
* @return bool } else {
* @internal param mixed $value session值 $_SESSION = [];
*/ }
public static function has($name, $prefix = '') { }
$prefix = $prefix ? $prefix : self::$prefix;
if (strpos ( $name, '.' )) { /**
// 支持数组 * 判断session数据
list ( $name1, $name2 ) = explode ( '.', $name ); *
return $prefix ? isset ( $_SESSION [$prefix] [$name1] [$name2] ) : isset ( $_SESSION [$name1] [$name2] ); * @param string $name
} else { * session名称
return $prefix ? isset ( $_SESSION [$prefix] [$name] ) : isset ( $_SESSION [$name] ); * @param string $prefix
} *
} * @return bool
* @internal param mixed $value session值
/** */
* 暂停session public static function has($name, $prefix = '')
* {
* @return void $prefix = $prefix ? $prefix : self::$prefix;
*/ if (strpos($name, '.')) {
public static function pause() { // 支持数组
// 暂停session list ($name1, $name2) = explode('.', $name);
session_write_close (); return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]);
} } else {
return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]);
/** }
* 启动session }
*
* @return void /**
*/ * 暂停session
public static function start() { *
session_start (); * @return void
} */
public static function pause()
/** {
* 销毁session // 暂停session
* session_write_close();
* @return void }
*/
public static function destroy() { /**
$_SESSION = [ ]; * 启动session
session_unset (); *
session_destroy (); * @return void
} */
public static function start()
/** {
* 重新生成session_id session_start();
* }
* @return void
*/ /**
private static function regenerate() { * 销毁session
session_regenerate_id (); *
} * @return void
*/
public static function destroy()
{
$_SESSION = [];
session_unset();
session_destroy();
}
/**
* 重新生成session_id
*
* @return void
*/
private static function regenerate()
{
session_regenerate_id();
}
} }