Cookie
Cookie 是一种在用户的浏览器中存储的小型文本文件,用于保存有关用户和他们的访问信息。它们通常用于以下目的:
|------|-----------------------------------------------------------------------------------------------------------------------|
| 主要功能 | * 会话管理:保持用户登录状态,例如识别已登录的用户。 * 个性化设置:保存用户的偏好设置,如语言、主题等。 * 跟踪和分析:跟踪用户的行为,以便进行分析和广告投放。 |
| 结构 | * 名称:Cookie 的标识符。 * 值:与名称关联的数据。 * 过期时间:指定 Cookie 的有效期。 * 路径:定义 Cookie 的有效范围。 * 域:限制 Cookie 的访问范围。 |
| 工作原理 | * 当用户访问网站时,服务器可以发送 Cookie 到浏览器,浏览器会将其存储。 * 在用户的后续请求中,浏览器会自动将相关 Cookie 发送回服务器,以便进行身份验证或提供个性化服务。 |
| 类型 | * 会话 Cookie:在浏览器关闭时失效。 * 持久性 Cookie:在设定的过期时间之前一直有效。 |
封装Cookies类
import 'dart:html' as html;
class Cookies {
// 单例模式
static final Cookies _instance = Cookies._internal();
factory Cookies() {
return _instance;
}
Cookies._internal(); // 私有构造函数
// 设置 cookie
static void set(String name, String value,
{Map<String, dynamic>? attributes}) {
if (attributes != null && attributes.containsKey('expires')) {
if (attributes['expires'] is int) {
final expires =
DateTime.now().add(Duration(days: attributes['expires']));
attributes['expires'] = expires.toUtc().toIso8601String();
}
}
name = Uri.encodeComponent(name);
String cookieString = '$name=${Uri.encodeComponent(value)}';
attributes?.forEach((key, value) {
if (value != null) {
cookieString += '; $key';
if (value is String) {
cookieString += '=${Uri.encodeComponent(value)}';
}
}
});
html.document.cookie = cookieString;
}
// 获取 cookie
static String? get(String name) {
if (name.isEmpty) {
return null;
}
var cookies = html.document.cookie?.split('; ') ?? [];
for (var cookie in cookies) {
var parts = cookie.split('=');
var value = parts.sublist(1).join('=');
try {
var found = Uri.decodeComponent(parts[0]);
if (name == found) {
return value;
}
} catch (e) {
// 处理异常
}
}
return null;
}
// 删除 cookie
static void remove(String name, {Map<String, dynamic>? attributes}) {
set(name, '', attributes: {
...?attributes,
'expires': -1, // 设置为 -1,表示立即过期
});
}
}
方法描述
方法 | 入参含义 | 描述 |
---|---|---|
set (name, value, attributes) | name:Cookie 的标识符。 value:与名称关联的数据 attributes:{ //其他配置 expires:过期时间(天),int类型 path:路径,默认是/ } | 设置Cookie |
remove(name,attributes) | name:Cookie 的标识符。 attributes:{ //其他配置 expires:过期时间(天),int类型 path:路径,默认是/ } | 删除Cookie |
get(name) | name:Cookie 的标识符 | 读取Cookie |