sessionStarted = (session_status() === PHP_SESSION_ACTIVE); if (!isset($_SESSION['_tempdata']) || !is_array($_SESSION['_tempdata'])) { $_SESSION['_tempdata'] = []; } $this->cleanupExpiredTempdata(); } // 设置常规会话数据(支持数组批量,或单个键值) public function set($key, $value = null) { if (!$this->sessionStarted) { return false; } if (is_array($key)) { foreach ($key as $k => $v) { $_SESSION[$k] = $v; } return true; } $_SESSION[$key] = $value; return true; } // 设置临时数据(带过期时间,单位秒) public function setTempdata($key, $value, $time) { if (!$this->sessionStarted) { return false; } $expire = time() + max(0, (int) $time); $_SESSION['_tempdata'][$key] = [ 'value' => $value, 'expire' => $expire, ]; return true; } // 获取临时数据($key 为 null 返回所有未过期临时数据) // 注意:读取不会删除;如需一次性使用,可调用 getTempdataOnce public function getTempdata($key = null) { if (!$this->sessionStarted) { return null; } $this->cleanupExpiredTempdata(); if ($key === null) { $result = []; foreach ($_SESSION['_tempdata'] as $k => $item) { $result[$k] = $item['value']; } return $result; } return isset($_SESSION['_tempdata'][$key]) ? $_SESSION['_tempdata'][$key]['value'] : null; } // 一次性获取临时数据(读取后即删除) public function getTempdataOnce($key) { if (!$this->sessionStarted) { return null; } $this->cleanupExpiredTempdata(); if (!isset($_SESSION['_tempdata'][$key])) { return null; } $value = $_SESSION['_tempdata'][$key]['value']; unset($_SESSION['_tempdata'][$key]); return $value; } // 获取常规会话数据($key 为 null 返回所有) public function get($key = null) { if (!$this->sessionStarted) { return null; } if ($key === null) { $data = $_SESSION; unset($data['_tempdata']); return $data; } return $_SESSION[$key] ?? null; } // 移除常规会话数据(支持数组) public function remove($key) { if (!$this->sessionStarted) { return false; } if (is_array($key)) { foreach ($key as $k) { if (array_key_exists($k, $_SESSION)) { unset($_SESSION[$k]); } } return true; } if (array_key_exists($key, $_SESSION)) { unset($_SESSION[$key]); return true; } return false; } // 销毁会话(可选) public function destroy() { if (!$this->sessionStarted) { return false; } $_SESSION = []; if (ini_get('session.use_cookies')) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']); } session_destroy(); $this->sessionStarted = false; return true; } // 获取 Session ID(可选) public function getId() { return $this->sessionStarted ? session_id() : null; } // 私有:清理过期临时数据 private function cleanupExpiredTempdata() { if (empty($_SESSION['_tempdata']) || !is_array($_SESSION['_tempdata'])) { $_SESSION['_tempdata'] = []; return; } $now = time(); foreach ($_SESSION['_tempdata'] as $k => $item) { if (!isset($item['expire']) || $item['expire'] <= $now) { unset($_SESSION['_tempdata'][$k]); } } } }