check($token, $user_id); } /** * 读取Token * @access public * @param string $token Token标识 * @param mixed $default 默认值 * @return mixed */ public static function get($token, $default = false) { return self::init()->get($token) ?: $default; } /** * 写入Token * @access public * @param string $token Token标识 * @param mixed $user_id 会员ID * @param int|null $expire 有效时间 0为永久 * @param string|null $platform 平台标识(header-platform),仅审计用 * @return boolean */ public static function set($token, $user_id, $expire = null, $platform = null) { if (is_null($platform)) { $platform = self::resolvePlatform(); } return self::init()->set($token, $user_id, $expire, $platform); } /** * 从请求 header 解析当前平台(header-platform),仅审计用 * @return string|null */ protected static function resolvePlatform() { try { $platform = \think\Request::instance()->header('platform'); if (is_array($platform)) { $platform = reset($platform); } $platform = trim((string)$platform); return $platform !== '' ? $platform : null; } catch (\Exception $e) { return null; } } /** * 统计用户当前有效终端数(按 user_id 聚合,不区分平台) * @param int $user_id 会员ID * @return int */ public static function getUserTerminalCount($user_id) { $handler = self::init(); if (method_exists($handler, 'getUserTerminalCount')) { return (int)$handler->getUserTerminalCount($user_id); } return 0; } /** * 删除该用户最早创建的一条有效 Token * @param int $user_id 会员ID * @return bool */ public static function deleteOldestTerminal($user_id) { $handler = self::init(); if (method_exists($handler, 'deleteOldestTerminal')) { return (bool)$handler->deleteOldestTerminal($user_id); } return false; } /** * 删除Token(delete别名) * @access public * @param string $token Token标识 * @return boolean */ public static function rm($token) { return self::delete($token); } /** * 删除Token * @param string $token 标签名 * @return bool */ public static function delete($token) { return self::init()->delete($token); } /** * 清除Token * @access public * @param int user_id 会员ID * @return boolean */ public static function clear($user_id = null) { return self::init()->clear($user_id); } }