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 < len; i++) {

parts = subCookies[i].split("=");

result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);

}

return result;

}

}

return null;

},

/** 获取一条子cookie的值

* param name : 表示cookie的名称,必填

* param subName : 表示子cookie的名称

* return : 一个子cookie的值

* eg : SubCookieUtil.get("info", "name");

**/

get : function (name, subName) {

var cookies = this.getAll(name);

if (cookies) {

return cookies[subName];

} else {

return null;

}

},

/** 删除一条完整cookie

* param name : 表示cookie的名称,必填

* param domain : 表示cookie的域名,可以不填

* param path : 表示cookie的路径,可以不填

* param secure : 表示cookie的安全标志,可以不填

* eg : SubCookieUtil.unsetAll("info");

**/

unsetAll : function (name, domain, path, secure) {

this.setAll(name, "", Date(0).toGMTString(), domain, path, secure);

},

/** 删除一条子cookie

* param name : 表示cookie的名称,必填

* param subName : 表示子cookie的名称,必填

* param domain : 表示cookie的域名,可以不填

* param path : 表示cookie的路径,可以不填

* param secure : 表示cookie的安全标志,可以不填

* eg : SubCookieUtil.unset("info", "name");

**/

unset : function (name, subName, domain, path, secure) {

var cookies = this.getAll(name);

if (cookies) {

delete cookies[subName];

this.setAll(name, cookies, null, domain, path, secure);

}

}

};

// 测试:

var zhang = {

name : "zhang",

age : 23,

height : "178cm",

weight : "66kg"

}

// 设置一条完整的cookie

SubCookieUtil.setAll("zhang", zhang);

// 获取一条完整的cookie

var zhang = SubCookieUtil.getAll("zhang");

alert(zhang.weight); // 66kg

// 再为张添加一个子cookie

SubCookieUtil.set("zhang", "sport", "basketball");

// 获取子cookie

alert(SubCookieUtil.get("zhang", "sport")); // basketball

// 删除一条子cookie

SubCookieUtil.unset("zhang", "age");

alert(SubCookieUtil.get("zhang", "age")); // undefined

// 删除一条完整的cookie

SubCookieUtil.unsetAll("zhang");

alert(SubCookieUtil.getAll("zhang")); // 报错,因为已经被删除

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

把数据保存到cook_JavaScript数据存储 Cookie篇相关推荐

  1. 把数据保存到cook_数据存储之HTTP Cookie

    补充说明: cookie未设置失效时间,浏览器没有删除cookie sessionStorage 在浏览器中打开新页面不会记录(sessionStorage),window.open 打开就会记录,为 ...

  2. 把数据保存到cook_将用户信息保存到Cookie中

    /** * 把用户保存到Cookie * * @param request * @param response * @param member */ private void rememberPwdA ...

  3. C++读取txt数据为二维数组 将数据保存到txt文本中

      C++读取txt数据为二维数组 保存txt文本数据     C++文件读写操作有:ofstream,ifstream,fstream: #include <fstream> ofstr ...

  4. Python中用pandas将numpy中的数组数据保存到csv文件

    Python中用pandas将numpy中的数组数据保存到csv文件 本博客转载自:[1]https://blog.csdn.net/grey_csdn/article/details/7018587 ...

  5. Arduino ESP32将数据保存到NVS中

    Arduino ESP32将数据保存到NVS中 该功能类似AVR单片机里面的EEPROM存储区域. 关于ESP32分区表参考<分区表> Preferences中数据以键值对(key - v ...

  6. Scrapy中将数据保存到Excel和MySQL中

    目录标题 1. Excel 1.1 openpyxl 1.1.1 代码说明 1.1.2 注意 1.2 pandas 1.2.1 代码说明 1.2.2 常见错误 1.3 openpyxl和pandas对 ...

  7. Python--爬虫爬取的数据保存到excel

    Python–爬虫爬取的数据保存到excel 文章目录 Python--爬虫爬取的数据保存到excel 一.excel表格存储 二.python3.9没有自带的xlwt模块和xlrd,需要自行下载 三 ...

  8. Pandas的学习(读取mongodb数据库集合到DataFrame,将DataFrame类型数据保存到mongodb数据库中)

    1.读取mongodb数据库集合到DataFrame import pymongo import pandas as pdclient = pymongo.MongoClient("数据库连 ...

  9. html 保存xlsx,HTML SaveXLSX按钮防止将数据保存到SlickGrid的XLSX文件中

    我在网页上有一个SlickGrid,我正在尝试添加一个按钮来调用函数CreateXLSX().当我编辑Main.jade的代码,我输入:HTML SaveXLSX按钮防止将数据保存到SlickGrid ...

最新文章

  1. QT的QReadLocker类的使用
  2. Chapter1 CLR的执行模式
  3. nginx中文件路径表示方法
  4. 大学计算机2级考证计划书,计算机二级培训计划书..doc
  5. 前端学习(2356):uni基本的插件安装
  6. notepadqq_Notepadqq Linux文本编辑器入门
  7. java 线程安全性_i++是线程安全的吗?如何解决线程安全性?
  8. 如何使用 Java 调取 Python、R 的训练模型?
  9. .net remoting 使用事件
  10. 在 java 中_关于final 关键字,在Java中,关于final关键字的说法正确的是()
  11. 一些常用的IOS开发网站
  12. pom文件显示删除线
  13. ADT下载地址,完整版
  14. 谷歌浏览器使用window.open()
  15. 手机市场的竞争,用户价值才是硬道理
  16. Microsoft Office SharePoint Designer 2007 宣布免费
  17. sql语句查询时,where条件同时使用and和or
  18. 日期函数DATEDIFF() 计算日期之差
  19. uniapp中进行地图定位
  20. mysql-1093 - You can‘t specify target table ‘titles_test‘ for update in FROM clause

热门文章

  1. java 点是否在三角形_java – 查找点是否在三角形内
  2. html安卓关闭输入面板,tabletpc输入面板关闭不了怎么办(tablet pc输入面板关闭方法)...
  3. ajax异步日历,用AJAX自定义日历(示例代码)
  4. 强化学习-Vanilla Policy Gradient(VPG)
  5. 指令篇: 查看系统版本信息___uname
  6. Linux ping不通百度的解决方法
  7. 周学习进度----03
  8. bzoj2161 布娃娃
  9. HIVE 在执行大量数据JOIN的时候,容易产生内存不足的情况
  10. 数据仓库/集市 星形/雪花形 事实/维度表