创建一个新的匿名访客会话。
(self)
| 255 | await asyncio.gather(*(_cleanup(session) for session in sessions)) |
| 256 | |
| 257 | async def _create_session(self) -> GuestSession: |
| 258 | """创建一个新的匿名访客会话。""" |
| 259 | headers = _build_dynamic_headers() |
| 260 | |
| 261 | # 访客鉴权会写入 cookie,复用同一个 client 会把“新建会话”粘回旧访客身份。 |
| 262 | async with _build_async_client() as auth_client: |
| 263 | response = await auth_client.get(AUTH_URL, headers=headers) |
| 264 | |
| 265 | if response.status_code != 200: |
| 266 | raise RuntimeError( |
| 267 | f"匿名会话创建失败: HTTP {response.status_code} {response.text[:200]}" |
| 268 | ) |
| 269 | |
| 270 | data = response.json() |
| 271 | token = str(data.get("token") or "").strip() |
| 272 | user_id = str( |
| 273 | data.get("id") or data.get("user_id") or data.get("uid") or "" |
| 274 | ).strip() |
| 275 | username = str( |
| 276 | data.get("name") |
| 277 | or str(data.get("email") or "").split("@")[0] |
| 278 | or f"guest-{user_id[:8] or 'session'}" |
| 279 | ).strip() |
| 280 | |
| 281 | if not token: |
| 282 | raise RuntimeError(f"匿名会话创建失败: 未返回 token {data}") |
| 283 | if not user_id: |
| 284 | user_id = f"guest-{token[:12]}" |
| 285 | |
| 286 | logger.info( |
| 287 | f"🫥 创建匿名会话成功: user_id={user_id}, username={username or 'Guest'}" |
| 288 | ) |
| 289 | return GuestSession( |
| 290 | token=token, |
| 291 | user_id=user_id, |
| 292 | username=username or "Guest", |
| 293 | ) |
| 294 | |
| 295 | async def _delete_all_chats(self, session: GuestSession) -> bool: |
| 296 | """删除匿名会话的全部对话,尽量释放并发占用。""" |
no test coverage detected