Flutter中使用Cookies

embedded/2024/10/23 13:50:01/

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(); // 私有构造函数// 设置 cookiestatic 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;}// 获取 cookiestatic 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;}// 删除 cookiestatic 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

http://www.ppmy.cn/embedded/129827.html

相关文章

开发常见错误状态码

一些常见的 HTTP 状态码及其描述&#xff0c;这些状态码在后端开发中经常遇到。这些状态码分为几类&#xff1a;信息性状态码、成功状态码、重定向状态码、客户端错误状态码和服务器错误状态码。 信息性状态码 (1xx) 100 Continue&#xff1a;客户端应继续其请求。101 Switch…

《软件报价全攻略:深入剖析与精准决策》

《软件报价全攻略&#xff1a;深入剖析与精准决策》 一、软件报价基础认知二、软件开发价格估算方法&#xff08;一&#xff09;公式构成与解析&#xff08;二&#xff09;工作量计算要素&#xff08;三&#xff09;开发费用构成 三、不同软件报价案例分析&#xff08;一&#…

YoloV9改进策略:主干网络改进|DeBiFormer,可变形双级路由注意力|全网首发

摘要 在目标检测领域,YoloV9以其高效和准确的性能而闻名。然而,为了进一步提升其检测能力,我们引入了DeBiFormer作为YoloV9的主干网络。这个主干网络的计算量比较大,不过,上篇双级路由注意力的论文受到很大的关注,所以我也将这篇论文中的主干网络用来改进YoloV9,卡多的…

【java】数组(超详细总结)

目录 一.一维数组的定义 1.创建数组 2.初始化数组 二.数组的使用 1.访问数组 2.遍历数组 3.修改数据内容 三.有关数组方法的使用 1.toString 2. copyOf 四.查找数组中的元素 1.顺序查找 2.二分查找binarySearch 五.数组排序 1.冒泡排序 2.排序方法sort 六.数组逆置…

双11预售爆单,个性化消费趋势下3C数码品牌如何脱颖而出?

在双11预售爆单的背景下&#xff0c;3C数码品牌面临着前所未有的机遇与挑战。随着消费者需求的日益个性化和多样化&#xff0c;3C品牌需要采取一系列策略来脱颖而出&#xff0c;满足市场需求&#xff0c;提升品牌影响力。 一、双11大促3C数码产品热卖 对于双11这样的大促而言…

uniapp开发钉钉小程序踩坑记录...

自定义组件样式丢失 原因&#xff1a;钉钉不支持styleIsolation为apply-shared 解决方案&#xff1a; 1&#xff09;构建出来的包全局替换为shared --此方法本人验证可行 2&#xff09;将hbuildx降低版本&#xff08;未验证&#xff09; 接口返回的非json数据&#xff0c;…

C++——NetWork

1.network.h #include <iostream> #include <winsock2.h> #include <cstring>class NetWork {int type; // 通信协议类型int sock_fd; // socket 描述符sockaddr_in addr; // 通信地址int addrlen; // 通信地址字节数bool issvr; …

读书电子书资源个人常用汇总

“问渠哪得清如许&#xff0c;为有源头活水来&#xff01;”喜欢读书的朋友&#xff0c;一定想阅读更多的书籍充实自己的人生&#xff0c;以下提供一些网络上免费的资源。 大学资源网 https://www.dxzy163.com/list/index157.html书栈网https://www.bookstack.cn/电子书-天涯客…