首页 > 其他分享 >Flutter中使用Cookies

Flutter中使用Cookies

时间:2024-10-28 18:47:48浏览次数:5  
标签:Cookies name expires value Cookie 使用 attributes Flutter

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

标签:Cookies,name,expires,value,Cookie,使用,attributes,Flutter
From: https://blog.csdn.net/nonagontech/article/details/143139723

相关文章

  • 掌控《F1车队经理2024》v1.3赛场:风灵月影十六项修改器使用手册
    引言《F1车队经理2024》v1.3是一款深受F1赛车迷喜爱的模拟经营类游戏,玩家可以扮演车队经理,管理车队、制定策略、培养车手,并带领车队在F1赛场上争夺荣誉。然而,对于部分玩家来说,游戏中的某些挑战可能过于艰巨,影响了他们的游戏体验。为了帮助这部分玩家更好地享受游戏,风灵月影团......
  • 使用站群服务器相比传统服务器能节省多少成本
    1.硬件成本:站群服务器通过托管多个网站,可以更有效地利用硬件资源,降低单个网站的硬件成本。相比于为每个网站单独租用服务器,站群服务器通过资源的集中管理和共享,显著降低了整体运营成本。2.维护成本:由于服务器数量减少,管理和维护成本也相应降低。站群服务器提供统一的管理平......
  • 使用 Docker可以 做什么?
    我可以使用Docker 快速、一致地交付您的应用程序。Docker允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合持续集成和持续交付(CI/CD)工作流。考虑以下示例场景:您的开发人员在本地编写代码并使用Docker容器与同......
  • 逆向工程入门篇-概述(工具使用)
    逆向工程入门第一章、逆向工程概述1.1概述逆向工程概述:一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。软件逆向工程是逆向工程在软件方......
  • C# SuperSocket 基础七【CountSpliterReceiveFilte-固定数量分隔符协议】不使用COMMAN
    publicclassCountSpliterReceiveFilterSession:AppSession<CountSpliterReceiveFilterSession>{publicoverridevoidSend(stringmessage){Console.WriteLine("发送消息:"+message);base.Send(message)......
  • 使用PYNQ生成PWM波控制舵机/步进电机/机械臂
    使用PYNQ生成PWM波控制舵机/步进电机/机械臂在开始这个工程之前,你需要PYNQ-Z2的板卡文件,约束文件,原理图作为参考,你可以在我上传的资源里下载。当然,这个工程也适用于PYNQ-Z1,只需要改一下板卡文件和约束文件。我使用的舵机如下:1.PWM信号脉宽调制(PWM)是一种调制技术,它生成可变......
  • elasticsearch使用
    1、选择1、ElasticsearchRestTemplate是spring对官方HighLevelRESTClient的封装。2、ElasticSearch8.x弃用了HighLevelRESTClient,移除了JavaTransportClient,推荐使用ElasticsearchJavaAPI(后续使用8的建议使用ElasticsearchJavaAPI)2、ElasticsearchRestTemp......
  • C# SuperSocket 基础六【CountSpliterReceiveFilte-固定数量分隔符协议】使用COMMAND
    publicclassCountSpliterReceiveFilterSession:AppSession<CountSpliterReceiveFilterSession>{publicoverridevoidSend(stringmessage){Console.WriteLine("发送消息:"+message);base.Send(message)......
  • 使用单个HTML实现贪吃蛇游戏
    下面是一个使用单个HTML文件实现的简单贪吃蛇游戏的示例。请将以下代码复制并粘贴到一个新的HTML文件中,然后用浏览器打开即可玩游戏。<!DOCTYPEhtml><htmllang="zh"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,ini......
  • 以学校数据模型为例,掌握在DAS下使用GaussDB
    @目录题目具体操作一、表的创建二、表数据的插入三、数据查询目的:这里以学校数据库模型为例,介绍GaussDB数据库、表等常见操作,以及SQL语法使用的介绍。题目假设A市B学校为了加强对学校的管理,引入了华为GaussDB数据库。在B学校里,主要涉及的对象有学生、教师、班级、院系和课程......