- A+
由于PHP自带的session销毁采用GC的销毁,具有诸多弊病,如无法及时清理过期session,所以最好通过程序来判断session是否过期。
tp5的 session类说明文档: https://www.kancloud.cn/manual/thinkphp5/126166
定义Session类
namespace app\common\toole; use think\Session as tpSession; use think\Config; use think\Loader; use think\Request; use think\Exception; class Session extends tpSession { }
Session 存储方法(重新set方法)
/** * Session 存储方法 * @param string $name 变量名 * @param mixed $value 要存储的数组/字符串 * @param string $prefix 作用域/模块名 * @static */ public static function set($name, $value = '', $prefix = null) { if (is_array($value)) { $value = self::setArr($value); } else { $value = self::setString($value); } parent::set($name, $value, self::getPrefix($prefix)); }
Session存储字符串
/** * Session 拼装字符串 */ public static function setString($value) { $data['value'] = $value; $data['expire'] = time() + Config::get("session.session_expire"); return $data; }
Session存储数组
/** * Session 拼装数组 */ public static function setArr($value) { $data['expire'] = time() + Config::get("session.session_expire"); $data['value'] = $value; return $data; }
Session 获取字符串
/** * Session 获取字符串 * @param string $name 变量名 * @param string $prefix 作用域 */ public static function get($name = '', $prefix = null) { $data = parent::get($name, self::getPrefix($prefix)); if ($data['expire'] < time()) { parent::delete($name); return null; } else { return $data['value']; } }
Session获取数组
/** * Session 获取数组值 * @param string $name 数组索引值 * @param string $set_name 数组存储的变量名 * @param string $prefix 作用域 */ public static function getArr($name = '', $set_name = '', $prefix = '') { $data = parent::get($set_name, self::getPrefix($prefix)); if ($data['expire'] < time()) { parent::delete($set_name); return null; } else if (isset($data['value'][$name])) { return $data['value'][$name]; } else { return null; } }
Session 获取作用域
protected static function getPrefix($prefix) { if (empty($prefix)) { $prefix = Request::instance()->module(); } return $prefix; }
Session 清空数据
/** * Session 清空 * @param string $prefix 作用域 */ public static function clear($prefix = null) { parent::clear(self::getPrefix($prefix)); }
Session 删除数据
/** * 删除session数据 * @param string|array $name session名称 * @param string|null $prefix 作用域(前缀) * @return void */ public static function delete($name, $prefix = null) { parent::delete($name, self::getPrefix($prefix)); }