Dart Cookie
最后修改于 2025 年 4 月 4 日
Dart 中的 Cookie
类表示 HTTP Cookie,用于在客户端和服务器之间维护状态。它是 dart:io
库的一部分,用于服务器端应用程序。
Cookie 存储在请求之间持久化的小块数据。它们对于 Web 应用程序中的会话、身份验证和用户跟踪至关重要。
基本定义
Cookie
对象包含名称-值对和可选属性。这些属性包括过期时间、域、路径、安全标志和 SameSite 策略。
该类提供了解析 Cookie 标头和格式化 HTTP Cookie 的方法。它同时处理服务器端 Cookie 的创建和客户端 Cookie 的解析。
创建基本 Cookie
此示例演示了如何创建仅包含名称和值的简单 Cookie。
import 'dart:io'; void main() { var cookie = Cookie('session_id', 'abc123xyz456'); print('Name: ${cookie.name}'); print('Value: ${cookie.value}'); print('ToString: $cookie'); }
我们创建一个带有名称和值的 Cookie。toString() 方法会将其正确格式化为 HTTP 标头。这是最基本的 Cookie 配置。
$ dart main.dart Name: session_id Value: abc123xyz456 ToString: session_id=abc123xyz456
带属性的 Cookie
此示例演示了设置各种 Cookie 属性,如过期时间。
import 'dart:io'; void main() { var cookie = Cookie('preferences', 'dark_mode=true'); cookie.domain = 'example.com'; cookie.path = '/settings'; cookie.expires = DateTime.now().add(Duration(days: 30)); cookie.httpOnly = true; cookie.secure = true; print(cookie); }
我们配置了一个带有域限制、路径、过期日期和安全标志的 Cookie。这些属性控制浏览器中的 Cookie 行为。
$ dart main.dart preferences=dark_mode=true; Domain=example.com; Path=/settings; Expires=Sat, 04 May 2025 14:32:10 GMT; HttpOnly; Secure
解析 Cookie 标头
此示例演示了如何将 Set-Cookie 标头字符串解析为 Cookie 对象。
import 'dart:io'; void main() { var header = 'user_token=xyz789; Max-Age=3600; Path=/; Secure; SameSite=Lax'; var cookie = Cookie.fromSetCookieValue(header); print('Name: ${cookie.name}'); print('Value: ${cookie.value}'); print('MaxAge: ${cookie.maxAge}'); print('Path: ${cookie.path}'); print('Secure: ${cookie.secure}'); print('SameSite: ${cookie.sameSite}'); }
fromSetCookieValue 构造函数解析 HTTP Set-Cookie 标头。它会自动将所有属性提取到 Cookie 对象属性中。
$ dart main.dart Name: user_token Value: xyz789 MaxAge: 3600 Path: / Secure: true SameSite: SameSite.lax
标头中的多个 Cookie
此示例演示了如何处理 HTTP 标头中的多个 Cookie。
import 'dart:io'; void main() { var cookieHeader = 'session=abc123; lang=en_US; theme=dark'; var cookies = Cookie.fromCookieValue(cookieHeader); for (var cookie in cookies) { print('${cookie.name}: ${cookie.value}'); } // Modify one cookie cookies[1].value = 'fr_FR'; print('\nModified: ${Cookie.toCookieValue(cookies)}'); }
我们解析了包含多个名称-值对的 Cookie 标头。该类提供了解析和序列化多个 Cookie 的方法,并遵循正确的 HTTP 格式。
$ dart main.dart session: abc123 lang: en_US theme: dark Modified: session=abc123; lang=fr_FR; theme=dark
Cookie 安全功能
此示例展示了与安全相关的 Cookie 属性,如 SameSite 和 HttpOnly。
import 'dart:io'; void main() { var secureCookie = Cookie('auth_token', 'secret123'); secureCookie.httpOnly = true; secureCookie.secure = true; secureCookie.sameSite = SameSite.strict; secureCookie.maxAge = 1800; // 30 minutes print('Secure cookie: $secureCookie'); // For sensitive operations var csrfCookie = Cookie('csrf_token', 'r4nd0mT0k3n'); csrfCookie.sameSite = SameSite.lax; print('CSRF cookie: $csrfCookie'); }
我们配置了安全标志以防止 XSS 和 CSRF 攻击。HttpOnly 防止 JavaScript 访问,而 SameSite 限制跨站请求。
$ dart main.dart Secure cookie: auth_token=secret123; Max-Age=1800; HttpOnly; Secure; SameSite=Strict CSRF cookie: csrf_token=r4nd0mT0k3n; SameSite=Lax
最佳实践
- 安全:始终为会话 Cookie 设置 HttpOnly
- HTTPS:在 HTTPS 上使用 Secure 标志处理 Cookie
- 过期:设置合理的 Max-Age 或 Expires
- 敏感数据:避免在 Cookie 中存储敏感信息
- 大小限制:将 Cookie 保持在 4KB 以下(浏览器限制)
来源
本教程介绍了 Dart 的 Cookie 类,通过示例展示了创建、解析、安全功能以及用于 Web 开发的 HTTP 标头处理。
作者
列出 所有 Dart 教程。