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,7 +10,9 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace think; namespace think;
class Session { class Session
{
protected static $prefix = ''; protected static $prefix = '';
/** /**
@@ -19,7 +21,8 @@ class Session {
* @param string $prefix * @param string $prefix
* @return string|void * @return string|void
*/ */
public static function prefix($prefix = '') { public static function prefix($prefix = '')
{
if (empty($prefix) && $prefix !== null) { if (empty($prefix) && $prefix !== null) {
return self::$prefix; return self::$prefix;
} else { } else {
@@ -33,7 +36,9 @@ class Session {
* @param array $config * @param array $config
* @return void * @return void
*/ */
public static function init($config = []) { public static function init($config = [])
{
$isDoStart = false;
if (isset($config['use_trans_sid'])) { if (isset($config['use_trans_sid'])) {
ini_set('session.use_trans_sid', $config['use_trans_sid'] ? 1 : 0); ini_set('session.use_trans_sid', $config['use_trans_sid'] ? 1 : 0);
} }
@@ -41,7 +46,7 @@ class Session {
// 启动session // 启动session
if (! empty($config['auto_start']) && PHP_SESSION_ACTIVE != session_status()) { if (! empty($config['auto_start']) && PHP_SESSION_ACTIVE != session_status()) {
ini_set('session.auto_start', 0); ini_set('session.auto_start', 0);
session_start (); $isDoStart = true;
} }
if (isset($config['prefix'])) { if (isset($config['prefix'])) {
@@ -84,6 +89,9 @@ class Session {
throw new \think\Exception('error session handler', 11700); throw new \think\Exception('error session handler', 11700);
} }
} }
if ($isDoStart) {
session_start();
}
} }
/** /**
@@ -97,7 +105,8 @@ class Session {
* 作用域(前缀) * 作用域(前缀)
* @return void * @return void
*/ */
public static function set($name, $value = '', $prefix = '') { public static function set($name, $value = '', $prefix = '')
{
$prefix = $prefix ? $prefix : self::$prefix; $prefix = $prefix ? $prefix : self::$prefix;
if (strpos($name, '.')) { if (strpos($name, '.')) {
// 二维数组赋值 // 二维数组赋值
@@ -123,7 +132,8 @@ class Session {
* 作用域(前缀) * 作用域(前缀)
* @return mixed * @return mixed
*/ */
public static function get($name = '', $prefix = '') { public static function get($name = '', $prefix = '')
{
$prefix = $prefix ? $prefix : self::$prefix; $prefix = $prefix ? $prefix : self::$prefix;
if ('' == $name) { if ('' == $name) {
// 获取全部的session // 获取全部的session
@@ -156,7 +166,8 @@ class Session {
* 作用域(前缀) * 作用域(前缀)
* @return void * @return void
*/ */
public static function delete($name, $prefix = '') { public static function delete($name, $prefix = '')
{
$prefix = $prefix ? $prefix : self::$prefix; $prefix = $prefix ? $prefix : self::$prefix;
if (strpos($name, '.')) { if (strpos($name, '.')) {
list ($name1, $name2) = explode('.', $name); list ($name1, $name2) = explode('.', $name);
@@ -181,7 +192,8 @@ class Session {
* 作用域(前缀) * 作用域(前缀)
* @return void * @return void
*/ */
public static function clear($prefix = '') { public static function clear($prefix = '')
{
$prefix = $prefix ? $prefix : self::$prefix; $prefix = $prefix ? $prefix : self::$prefix;
if ($prefix) { if ($prefix) {
unset($_SESSION[$prefix]); unset($_SESSION[$prefix]);
@@ -200,7 +212,8 @@ class Session {
* @return bool * @return bool
* @internal param mixed $value session值 * @internal param mixed $value session值
*/ */
public static function has($name, $prefix = '') { public static function has($name, $prefix = '')
{
$prefix = $prefix ? $prefix : self::$prefix; $prefix = $prefix ? $prefix : self::$prefix;
if (strpos($name, '.')) { if (strpos($name, '.')) {
// 支持数组 // 支持数组
@@ -216,7 +229,8 @@ class Session {
* *
* @return void * @return void
*/ */
public static function pause() { public static function pause()
{
// 暂停session // 暂停session
session_write_close(); session_write_close();
} }
@@ -226,7 +240,8 @@ class Session {
* *
* @return void * @return void
*/ */
public static function start() { public static function start()
{
session_start(); session_start();
} }
@@ -235,7 +250,8 @@ class Session {
* *
* @return void * @return void
*/ */
public static function destroy() { public static function destroy()
{
$_SESSION = []; $_SESSION = [];
session_unset(); session_unset();
session_destroy(); session_destroy();
@@ -246,7 +262,8 @@ class Session {
* *
* @return void * @return void
*/ */
private static function regenerate() { private static function regenerate()
{
session_regenerate_id(); session_regenerate_id();
} }
} }