热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

JavaScript数据存储Cookie篇

这篇文章主要为大家介绍了JavaScript数据存储Cookie篇,感兴趣的朋友可以参考一下

1.什么是COOKIE?
    答:COOKIE是用于在客户端存储会话信息的。
2.COOKIE的组成部分?
    ①名称:一个唯一确定COOKIE 的名称。建议区分大小写。COOKIE 的名称必须是经过URL 编码的。
    ②值:储存在COOKIE 中的字符串值。值必须被URL 编码。
    ③域:COOKIE 对于哪个域是有效的。所有向该域发送的请求中都会包含这个COOKIE 信息。这个值可以包含子域(subdomain,如www.wrox.com),也可以不包含它(如.wrox.com,则对于wrox.com的所有子域都有效)。如果没有明确设定,那么这个域会被认作来自设置COOKIE 的那个域。
    ④路径:对于指定域中的那个路径,应该向服务器发送COOKIE。例如,你可以指定COOKIE 只有从http://www.wrox.com/books/ 中才能访问,那么http://www.wrox.com 的页面就不会发送COOKIE 信息,即使请求都是来自同一个域的。
    ⑤失效时间:表示COOKIE 何时应该被删除的时间戳。默认情况下,浏览器会话结束时即将所有COOKIE 删除;不过也可以自己设置删除时间。这个值是个GMT 格式的日期(Wdy, DD-Mon-YYYY HH:MM:SS GMT),用于指定应该删除COOKIE 的准确时间。因此,COOKIE
    可在浏览器关闭后依然保存在用户的机器上。如果你设置的失效日期是个以前的时间,则COOKIE 会被立刻删除。
    ⑥安全标志:指定后,COOKIE 只有在使用SSL 连接的时候才发送到服务器。例如,COOKIE 信息只能发送给https://www.wrox.com,而http://www.wrox.com 的请求则不能发送COOKIE。
3.列举一个COOKIE的例子?
    以下是一个完整的COOKIE的例子,我们将把它分解开来:
    Set-COOKIE: name=value; expires=Mon, 22-Jan-07 07:10:24 GMT; domain=.wrox.com; path=/; secure
    ①名称: name字符串表示
    ②值:value字符串表示
    ③过期时间:Mon, 22-Jan-07 07:10:24 GMT
    ④域名:.wrox.com
    ⑤路径:当前目录/
    ⑥安全标志:secure
4.如何操作COOKIE?
 

  var COOKIEUtil = {
    // 设置COOKIE
    set : function (name, value, expires, domain, path, secure) {
      var COOKIEText = "";
      COOKIEText += encodeURIComponent(name) + "=" + encodeURIComponent(value);
      if (expires instanceof Date) {
        COOKIEText += "; expires=" + expires.toGMTString();
      }
      if (path) {
        COOKIEText += "; path=" + path;
      }
      if (domain) {
        COOKIEText += "; domain=" + domain;
      }
      if (secure) {
        COOKIEText += "; secure";
      }
      document.COOKIE = COOKIEText;
    },
    // name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure
    // 获取COOKIE
    get : function (name) {
      var COOKIEName = encodeURIComponent(name) + "=",
        COOKIEStart = document.COOKIE.indexOf(COOKIEName),
        COOKIEValue = "";
      if (COOKIEStart > -1) {
        var COOKIEEnd = document.COOKIE.indexOf (";", COOKIEStart);
        if (COOKIEEnd == -1) {
          COOKIEEnd = document.COOKIE.length;
        }
        COOKIEValue = decodeURIComponent(document.COOKIE.substring(COOKIEStart + COOKIEName.length, COOKIEEnd));
      }
      return COOKIEValue; 
    },
    // 删除COOKIE
    unset : function (name, domain, path, secure) {
      this.set(name, "", Date(0), domain, path, secure);
    }
  };
  // 测试
  COOKIEUtil.set("name", "zhang");
  var name = COOKIEUtil.get("name");
  alert(name);  // zhang
  COOKIEUtil.unset("name");
  alert(COOKIEUtil.get("name")); // 空

5.COOKIE的限制
    ①存储数据数量有限
    ②保了储存在COOKIE 中的信息只能让批准的接受者访问,而无法被其他域访问
    ③安全性有限
6.针对COOKIE数据存储少量的问题,我们提出了子COOKIE的概念。即在每条COOKIE的值中存储多条数据,用"&"隔开。

  var SubCOOKIEUtil = {
    /** 设置一条完整的COOKIE
    *  param name : 表示COOKIE的名称,必填
    *  param subCOOKIEs : 表示COOKIE的值,为一个对象,必填
    *  param expires : 表示COOKIE的过期时间,可以不填
    *  param domain : 表示COOKIE的域名,可以不填
    *  param path : 表示COOKIE的路径,可以不填
    *  param secure : 表示COOKIE的安全标志,可以不填
    *  eg : SubCOOKIEUtil.setAll("info", { name : "zhang", age : 23});
    **/
    setAll : function (name, subCOOKIEs, expires, domain, path, secure) {
      var COOKIEText = "", subName, COOKIEParts = [];
      COOKIEText += encodeURIComponent(name) + "=";
      for(subName in subCOOKIEs) {
        COOKIEParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subCOOKIEs[subName]));
      }
      if (COOKIEParts.length > 0) {
        COOKIEText += COOKIEParts.join("&");
        if (expires instanceof Date) {
          COOKIEText += "; expires=" + expires.toGMTString();
        }
        if (path) {
          COOKIEText += "; path=" + path;
        }
        if (domain) {
          COOKIEText += "; domain=" + domain;
        }
        if (secure) {
          COOKIEText += "; secure";
        }
      } else {
        COOKIEText += "; expires=" + Date(0).toGMTString();
      }
      document.COOKIE = COOKIEText;
    },
    /** 设置一条子COOKIE
    *  param name : 表示COOKIE的名称,必填
    *  param subName : 表示子COOKIE的名称,必填
    *  param value : 表示子COOKIE的值,必填
    *  param expires : 表示COOKIE的过期时间,可以不填
    *  param domain : 表示COOKIE的域名,可以不填
    *  param path : 表示COOKIE的路径,可以不填
    *  param secure : 表示COOKIE的安全标志,可以不填
    *  eg : SubCOOKIEUtil.set("info", "sex", "boy");
    **/
    set : function (name, subName, value, expires, domain, path, secure) {
      var COOKIEs = this.getAll(name) || {};
      COOKIEs[subName] = value;
      this.setAll(name, COOKIEs, expires, domain, path, secure);
    },
    /** 读取一条完整COOKIE
    *  param name : 表示COOKIE的名称,必填
    *  return : 一个COOKIE对象
    *  eg : SubCOOKIEUtil.getAll("info");
    **/
    getAll : function (name) {
      var COOKIEName = encodeURIComponent(name) + "=",
        COOKIEStart = document.COOKIE.indexOf(COOKIEName),
        COOKIEValue = "", i, len, subCOOKIEs, parts, result = {};
      if (COOKIEStart > -1) {
        var COOKIEEnd = document.COOKIE.indexOf (";", COOKIEStart);
        if (COOKIEEnd == -1) {
          COOKIEEnd = document.COOKIE.length;
        }
        COOKIEValue = decodeURIComponent(document.COOKIE.substring(COOKIEStart + COOKIEName.length, COOKIEEnd));
        if (COOKIEValue.length > 0) {
          subCOOKIEs = COOKIEValue.split("&");
          for (i = 0, len = subCOOKIEs.length; i 

以上就是本文的全部内容,希望对大家的学习有所帮助。


推荐阅读
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 本文基于对相关论文和开源代码的研究,详细介绍了LOAM(激光雷达里程计与建图)的工作原理,并对其关键技术进行了分析。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
author-avatar
zhangmy0815522
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有