学习要点:
1.cookie
2.cookie 局限性
3.其他存储
随着 Web 越来越复杂,开发者急切的需要能够本地化存储的脚本功能。这个时候,第一个出现的方案:cookie 诞生了。cookie 的意图是:在本地的客户端的磁盘上以很小的文件形式保存数据。
一.Cookie
cookie 也叫 HTTP Cookie, 最初是客户端与服务器端进行会话使用的。 比如, 会员登录,下次回访网站时无须登录了; 或者是购物车, 购买的商品没有及时付款, 过两天发现购物车
里还有之前的商品列表。
HTTP Cookie 要求服务器对任意 HTTP 请求发送 Set-Cookie,因此,Cookie 的处理原则上需要在服务器环境下进行。当然,现在大部分浏览器在客户端也能实现 Cookie 的生成和获取。(目前 Chrome 不可以在客户端操作,其他浏览器均可)
cookie 的组成
cookie 由名/值对形式的文本组成:name=value。完整格式为:
name=value; [expires=date]; [path=path]; [domain=somewhere.com]; [secure]
中括号是可选,name=value 是必选。
document.cookie = 'user=' + encodeURIComponent('chaoyi'); //编码写入 alert(decodeURIComponent(document.cookie)); //解码读取
expires=date 失效时间,如果没有声明,则为浏览器关闭后即失效。声明了失效时间,那么时间到期后方能失效。
var date = new Date(); //创建一个 date.setDate(date.getDate() + 7); document.cookie = "user= " + encodeURIComponent('chaoyi') +";expires=" + date;
PS: 可以通过 Firefox 浏览器查看和验证失效时间。 如果要提前删除 cookie 也非常简单,只要重新创建 cookie 把时间设置当前时间之前即可:date.getDate() - 1 或 new Date(0)。
path=path 访问路径, 当设置了路径, 那么只有设置的那个路径文件才可以访问 cookie。
var path = '/E:/%E5%A4%87%E8%AF%BE%E7%AC%94%E8%AE%B0/JS1/29/demo'; document.cookie = "user= " + encodeURIComponent('chaoyi') + ";path=" + path;
PS:为了操作方便,我直接把路径复制下来,并且增加了一个目录以强调效果。
domain=domain 访问域名,用于限制只有设置的域名才可以访问,那么没有设置,会默认限制为创建 cookie 的域名。
var domain = 'yc60.com'; document.cookie = "user= " + encodeURIComponent('chaoyi') + ";domain=" + domain;
PS:如果定义了 yc60.com,那么在这个域名下的任何网页都可访问,如果定义了v.yc60.com,那么只能在这个二级域名访问该 cookie,而主域名和其他子域名则不能访问。
PS:设置域名,必须在当前域名绑定的服务器上设置,如果在 yc60.com 服务器上随意设置其他域名,则会无法创建 cookie。
secure 安全设置,指明必须通过安全的通信通道来传输(HTTPS)才能获取 cookie。
document.cookie = "user= " + encodeURIComponent('chaoyi') + ";secure";
PS:https 安全通信链接需要单独配置。
JavaScript 设置、 读取和删除并不是特别的直观方便, 我们可以封装成函数来方便调用。
//创建 cookie
function setCookie(name, value, expires, path, domain, secure) { var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value); if (expires instanceof Date) { cookieText += '; expires=' + expires; } if (path) { cookieText += '; expires=' + expires; } if (domain) { cookieText += '; domain=' + domain; } if (secure) { cookieText += '; secure'; } document.cookie = cookieText; }
//获取 cookie
function getCookie(name) { var cookieName = encodeURIComponent(name) + '='; var cookieStart = document.cookie.indexOf(cookieName); var cookieValue = null; 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
function unsetCookie(name) { document.cookie = name + "= ; expires=" + new Date(0); }
//失效天数,直接传一个天数即可
function setCookieDate(day) { if (typeof day == 'number' && day > 0) { var date = new Date(); date.setDate(date.getDate() + day); } else { throw new Error('传递的 day 必须是一个天数,必须比 0 大'); } return date; }
二.cookie 局限性
cookie 虽然在持久保存客户端用户数据提供了方便, 分担了服务器存储的负担。 但是还有很多局限性的。
第一:每个特定的域名下最多生成 20 个 cookie(根据不同的浏览器有所区别) 。
1.IE6 或更低版本最多 20 个 cookie
2.IE7 和之后的版本最多可以 50 个 cookie。 IE7 最初也只能 20 个, 之后因被升级不定后增加了。
3.Firefox 最多 50 个 cookie
4.Opera 最多 30 个 cookie
5.Safari 和 Chrome 没有做硬性限制。
PS:为了更好的兼容性,所以按照最低的要求来,也就是最多不得超过 20 个 cookie。
当超过指定的 cookie 时,浏览器会清理掉早期的 cookie。IE 和 Opera 会清理近期最少使用的 cookie,Firefox 会随机清理 cookie。
第二:cookie 的最大大约为 4096 字节(4k),为了更好的兼容性,一般不能超过 4095 字节即可。
第三:cookie 存储在客户端的文本文件,所以特别重要和敏感的数据是不建议保存在cookie 的。比如银行卡号,用户密码等。
三.其他存储
IE 提供了一种存储可以持久化用户数据,叫做 userData,从 IE5.0 就开始支持。每个数据最多 128K,每个域名下最多 1M。这个持久化数据存放在缓存中,如果缓存没有清理,那么会一直存在。
<div style="behavior:url(#default#userData)" id="box"></div> addEvent(window, 'load', function () { var box = document.getElementById('box'); box.setAttribute('name', encodeURIComponent('chaoyi')); box.expires = setCookieDate(7); box.save('bookinfo'); //box.removeAttribute('name'); //删除 userDate //box.save('bookinfo'); box.load('bookinfo'); alert(decodeURIComponent(box.getAttribute('name'))); });
PS:这个数据文件也是保存在 cookie 目录中,只要清除 cookie 即可。如果指定过期日期,则到期后自动删除,如果没有指定就是永久保存。
Web 存储
在比较高版本的浏览器,JavaScript 提供了 sessionStorage 和 globalStorage。在 HTML5中提供了 localStorage 来取代 globalStorage。 而浏览器最低版本为: IE8+、 Firefox3.5+、 Chrome4+和 Opera10.5+。
PS:由于这三个对浏览器版本要求较高,我们就只简单的在 Firefox 了解一下,有兴趣的可以通过关键字搜索查询。
//通过方法存储和获取
sessionStorage.setItem('name', 'chaoyi'); alert(sessionStorage.getItem('name'));
//通过属性存储和获取
sessionStorage.book = 'chaoyi'; alert(sessionStorage.book);
//删除存储
sessionStorage.removeItem('name');
PS: 由于 localStorage 代替了 globalStorage, 所以在 Firefox、 Opera 和 Chrome 目前的最新版本已不支持。
//通过方法存储和获取
localStorage.setItem('name', 'chaoyi'); alert(localStorage.getItem('name'));
//通过属性存储和获取
localStorage.book = 'chaoyi'; alert(localStorage.book);
//删除存储
localStorage.removeItem('name');
PS:这三个对象都是永久保存的,保存在缓存里,只有手工删除或者清理浏览器缓存方可失效。 在容量上也有一些限制, 主要看浏览器的差异, Firefox3+、 IE8+、 Opera 为 5M,Chrome 和 Safari 为 2.5M。
相关推荐
20. **第二十章:CSS与JavaScript的结合** - 使用JavaScript操作样式 - 动画与过渡效果 21. **第二十一章:移动Web开发** - 移动端适配 - 响应式设计与媒体查询 22. **第二十二章:安全问题** - XSS与CSRF...
2. **第二章:变量与常量** - PHP变量的声明和使用 - 变量的作用域(global, local, static) - 常量与define()函数 - 变量的类型转换 3. **第三章:运算符与控制结构** - 算术、比较、逻辑运算符 - 条件语句...
### 第十九章:实战项目 最后,通过一个实际的Web应用项目,让读者将所学知识综合运用,巩固和提升PHP开发能力。 通过这19章的学习,读者将对PHP有全面的了解,具备独立开发Web应用的能力。同时,本手册强调实践,...
第二章:PHP语法基础 这一章讲解了PHP的基本语法,如变量、常量、数据类型(字符串、整型、浮点型、布尔型、数组、对象等)、运算符(算术、比较、逻辑、赋值等)以及流程控制结构(条件语句、循环语句)。 第三章...
**第二章:PHP环境配置与MySQL安装** 在开始学习之前,需要安装PHP和MySQL。通常,开发者会使用像XAMPP或WAMP这样的集成开发环境,它们包含了Apache服务器、PHP、MySQL等必要组件。安装过程简单,只需按照向导步骤...
第二十九章: Jsp 技术 583 学习目标 583 JSP介绍 584 JSP语法 584 模板元素 588 指令元素 588 页面指令 588 标签库指令 593 脚本元素 593 动作元素 597 <jsp:include> 598 JSP内置对象 605 Session和Application...
#### 第二十一章:与JSON工作 JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。本章介绍了如何在JavaScript中处理JSON数据。 #### 第二十二章:独特的浏览器特性 不同的浏览器可能会...
第二讲:Python语言基础(运算符与表达式,控制流,函数,模块) 第三讲:Python语言基础(基本数据结构) 第四讲:Python语言基础(面向对象,Pyramid框架入门) 第五讲:Pyramid框架入门 第六讲:存储模型设 ...
第二章:WEB服务器控件 26 2.1 WEB 服务器控件的格式 26 2.2 服务器控件的类型 27 2.3 用服务器控件建立页面 27 2.4 控件的常见属性 29 2.5 控件的种类 31 第三章:HTML控件和验证控件 42 3.1 HTML服务器控件简介 42...
**第二章:爬虫基础知识** 本章讨论了爬虫的法律风险,以及如何对目标网站进行背景调查,如了解Robots协议、Sitemap、网站规模估算、技术架构识别和网站所有者信息等,这些都是进行有效爬取前的重要准备。 **第三章...
**第二章:安装与配置PHP** 安装PHP通常涉及下载PHP源代码,配置编译选项,然后将其集成到Web服务器中,如Apache。配置文件php.ini用于设置PHP的行为,包括错误报告级别、内存限制等。对于Windows用户,也可以选择预...
2. **第二章:准备开始 PHP 开发工作** - 安装和配置 PHP 开发环境。 - 基础的 PHP 语法介绍。 - 创建第一个 PHP 文件及运行过程。 3. **第三章:如何编写 PHP 脚本** - PHP 脚本的基本结构。 - 变量、数据...
《21天学通C#》是一本针对初学者的编程教材,其源码部分涵盖了从第十一章到第二十一章的内容。这十章的源码涵盖了C#编程的许多核心概念和技术,对于想要深入理解C#编程语言的初学者来说,是一个非常宝贵的学习资源。...
6. 第16行至第20行:比较Cookie的名称,如果与"CookieCount"相同,则设置`cookieFound`为true。 7. 第24行至第33行:处理老用户的情况,更新计数器并设置Cookie的新值。 8. 第36行至第44行:处理新用户的情况,创建...
### 第二十三章:多项目集中权限管理及分布式会话 #### 23.1 部署架构 多项目集中权限管理及分布式会话的实现通常涉及到复杂的部署架构设计。 #### 23.2 项目架构 具体实现时需要考虑项目的整体架构,包括模块...
第二章:WEB服务器控件 23 2.1 WEB 服务器控件的格式 23 2.2 服务器控件的类型 23 2.3 用服务器控件建立页面 23 2.3.1 在设计界面上使用服务器控件高级编程) 24 2.3.2 在Source界面使用服务器控件 24 2.3.3 处理...
### 第29章:ASP.NET 3.5部署与优化 本章讲解了如何将ASP.NET 3.5应用部署到生产环境,并进行性能优化: 1. **发布与部署**:介绍了发布设置、IIS配置等部署流程。 2. **性能监控**:使用工具检测性能瓶颈,优化...
计算机网络_自顶向下方法与Internet特色(第二章)课后习题答案中文版 计算机网络是计算机科学和信息技术领域中的一个重要方向,该领域涉及到计算机之间的联网、通信和信息交换等方面。在这里,我们将对计算机网络的...
在"COOKIE浏览器20121029.exe"这个文件中,我们可以推测这是该软件的一个特定版本,发布于2012年10月29日。exe文件通常是Windows操作系统中的可执行程序,这意味着它是用户安装或运行"COOKIE浏览器"的程序。而...