补充说明:

cookie未设置失效时间,浏览器没有删除cookie

sessionStorage 在浏览器中打开新页面不会记录(sessionStorage),window.open 打开就会记录,为什么?

Cookie (HTTP Cookie)

作用

HTTP本身是无状态的,客户端通过Cookie来存储会话信息

限制

cookie在性质上是绑定在特定域名下的

意思是说当设定了一个cookie之后,再给创建这个cookie的域名发送请求的时候,都会包含这个cookie,这个限制确保了存储在cookie中的信息只能让批准的接受者访问,而无法被其他域访问

每个域名的cookie总数有限制 (name=value&age=18) 两个

IE7之后 最多50个

Firefox 最多50个

Opera 最多30个

Safari和 chrome 对每个域名的cookie数量没有限制

cookie的尺寸有限制 大约4096B(加减1)的长度限制 建议cookie的长度限制在4095B以内 尺寸限制影响到一个域下的所有cookie,而非每个cookie单独限制

组成

名称

一个唯一确定cookie的名称 不区分大小写 mycookie 和 myCookie是一个cookie 实践中最好区分大小写 名称要被URL编码

存储cookie的字符串值 要被URL编码

cookie对于哪个域名是有效的 所有向该域发送的请求中都会包含这个cookie的信息

可以包含子域(subdomain 如www.wrox.com)

不包含子域 (如 .wrox.com 对于所有的子域都有限 可以做跨域信息存储)

默认 来自设置cookie的那个域

路径

对于指定域中的路径应该向服务器发送cookie 例:可以指定cookie只可以从http://www.wrox.com/book/中访问,那么http://www.wrox.com的页面就不会发送cookie信息

即便请求来自同一个域

失效时间

表示cookie何时应该被删除的时间戳(也就是何时应该停止向服务器发送这个cookie)

默认情况下 浏览器会话结束时即将所有的cookie删除

时间格式 GMT (toGMTString())

如果设置的失效时间是当前时间以前 则cookie会被立刻删除

安全标识

在字符串中指定 secure 即可

指定后,只有使用SSL连接的时候才发送到服务器。例如cookie信息只能发送https://www.wrox.com 而 http://www.wrox.com的请求不能发送cookie

注意:

cookie的名称 和 值 要经过 URL编码

域 路径 实效时间 secure标志都是服务器给浏览器的指示,以指定何时发送cookie 这些参数并不会发送到服务器的cookie信息的一部分,只有名值对才发送

例子

注:这里说的set-Cookie是客户端设置的内容

set-Cookie: name=value;domain=.wrox.com; path=/; secure

这里创建了一个对于所有的wrox.com的子域和域名下(由path参数指定的)所有页面都有效的cookie 因为创建了 secure标志 这个cookie只能通过SSL连接才能传输

JS中的cookie

document.cookie

返回当前页面可用的所有cookie(根据cookie的域 路径 失效时间 和安全设置)

document.cookie = "key=value" 不会覆盖之前的cookie 而是添加到cookie的字符串中 如果key相同 则覆盖

设置

name=value; expires=expiration_time; path=domian_path; secure

只有name和value是必要参数 其余为可选

例子

document.cookie = encodeURIComponent("name") + "=" + encodeURIComponent("value") +"; domain=".wrox.com; path=/; expires=" + new Date(); //new Date(0)设置为过期

IE 用户数据

var dataStore = document.getElementById("dataStore");

dataStore.setAttribute("name", "lxk");

dataStore.setAttribute("age", 22);

dataStore.save("info")

div元素上存了两部分信息 在setAttribute()存储之后 调用了save方法 指定了数据空间的名称为info 下一次页面载入的时候 使用load()方法指定同样的数据空间来获取数据 值不存在或者载入不存在的 返回为null

dataStore.load("info");

dataStore.getAttribute("name") --> lxk;

dataStore.getAttribute("age") --> 22

可以调用removeAttribute("name")来删除 之后再调用save()方法保存即可

延伸:

不同子域之间通信问题

可以通过设置 domain为.wrox.com 来让所有的子域可以拿到这个cookie

HTTP 是一个网络协议 专门用来传输WEB的内容的

SSL

Secure Sockets Layer 安全套接层 网景提出

为啥有SSL协议呢

因为HTTP协议是明文的,存在很多缺点(传输内容会被窥探和修改)

TLS

Transport Layer Security 传输层安全协议

1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化 之后标准化的名字叫TLS 和SSL为同一个东西的不同阶段

HTTPS

HTTP + SSL/TLS

var CookieUtil ={

/*

* 思路

* 字符串的截取(开始位置, 结束位置)

* 开始位置 indexOf() + name.length

* 结束位置 indexOf(";", 开始位置) 如果= -1 结束位置等于字符串的长度;

**/get: function(name){

var cookieName = encodeURIComponent(name) + "=",

cookieStart =document.cookie.indexOf(cookieName),

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))

}

returncookieValue;

},

set: function(name, value, expires, path, domain, secure){

var cookieText = encodeURIComponent(name) + "=" +encodeURIComponent(value);

if(expires instanceofDate){

cookieText += "; expires=" +expires.toGMTString();

}

if(path){

cookieText += "; path=" +path;

}

if(domain){

cookieText += "; domain=" +domain;

}

if(secure){

cookieText += "; secure";

}

document.cookie =cookieText;

},

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

this.set(name, "", new Date(0), path, domain, secure);

}

};

/*

* 解析 cookie格式(subCookie)为 name=name1=value1&name2=value2&name3=value

*

*

**/

var SubCookieUtil ={

get: function(name, subName){

var subCookie = this.getAll(name);

if(subCookie){

returnsubCookie[subName];

}else{

return null;

}

},

getAll: function(name){

var cookieName = encodeURIComponent(name) + "=",

cookieStart =document.cookie.indexOf(cookieName),

cookieValue = null,

cookieEnd,

subCookies,

i,

parts,

result ={};

if(cookieStart > -1){

cookieEnd = document.cookie.indexOf(";", cookieStart);

if(cookieEnd == -1){

cookieEnd =document.cookie.length;

}

cookieValue = 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])

}

returnresult;

}

}

return null;

},

set: function(name, subName, value, expires, path, domain, secure){

var subcookies = this.getAll(name) ||{};

subcookies[subName] =value;

this.setAll(name, subcookies, expires, path, domain, secure)

},

/*

* setALl("data", {name:"Nicholas", age: 22}, new Date("January 2 2020"))

*.

**/setAll: function(name, subcookies, expires, path, domain, secure){

var cookieText = encodeURIComponent(name) + "=",

subCookieParts = newArray(),

subName;

for(subName insubcookies){

if(subName.length > 0 &&subcookies.hasOwnProperty(subName)){

subCookieParts.push(encodeURIComponent(subName) + "=" +encodeURIComponent(subcookies[subName]))

}

}

if(subCookieParts.length > 0){

cookieText += subCookieParts.join("&");

if(expires instanceofDate){

cookieText += "; expires=" +expires.toGMTString();

}

if(path){

cookieText += "; path=" +path;

}

if(domain){

cookieText += "; domain=" +domain;

}

if(secure){

cookieText += "; secure";

}

}else{

cookieText += "; expires=" + (new Date(0)).toGMTString();

}

document.cookie =cookieText;

},

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

var subcookies = this.getAll(name);

if(subcookies){

deletesubcookies[subName];

this.setAll(name, subcookies, null, path, domain, secure)

}

},

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

this.setAll(name, null, new Date(0), path, domain, secure)

}

}

把数据保存到cook_数据存储之HTTP Cookie相关推荐

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

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

  2. 把数据保存到cook_JavaScript数据存储 Cookie篇

    1.什么是cookie? 答:cookie是用于在客户端存储会话信息的. 2.cookie的组成部分?    ①名称:一个唯一确定cookie 的名称.建议区分大小写.cookie 的名称必须是经过U ...

  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. java兔子_JAVA经典兔子问题
  2. .NET Core使用微软AI认知服务识别文字语言
  3. python3捕获异常_python中异常捕获方法详解
  4. Mybatis There is no getter for property named 'XXX' in 'class java.lang.XXX
  5. Android中英文单词录入背诵软件
  6. GridView里面的Item高度设置
  7. 全文搜索引擎Solr原理和实战教程
  8. linux攻击主机msfconsole,关于利用kali linux2017.2中MSFCONSOLE 利用MS17-010漏洞发起攻击的坑...
  9. redis hset hget字典的实现
  10. selenium必应搜索,获取标题以及url
  11. python五角星符号怎么打出来_如何使用python输出连续星号?
  12. 张小军详解华为区块链政务应用,指出区块链的应用领域正从金融向全领域拓展...
  13. 程序修行从“拔刀术”到“万剑诀”
  14. 《PostgreSQL技术内幕:事务处理深度探索》上市了!
  15. Linux系统下利用Impost3r劫持sudo命令窃取凭据
  16. python3爬虫系列教学、案例、代码实战,看这几篇就够了
  17. 项目交易平台上发布的项目
  18. Zend framework简介
  19. 苹果手机网络设置信号满都无法连接服务器,iphone手机经常没信号怎么办 这么做让你的手机信号瞬间满格...
  20. 百度外卖拟融资5亿美元,补贴力度要加大?

热门文章

  1. Cocos2d之Ref类与内存管理使用详解
  2. 在 Windows 下远程桌面连接 Linux - XManager 篇
  3. javac -version ;java -version不一致
  4. 《qos》一书受到读者好评
  5. Python必备封装基本代码~Python函数
  6. 更改多个版本java_window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法...
  7. 培训协议与服务器有没有要求,上面说的是提供专业培训且规定了服务器和培训费以及违约金的问题。试用期辞职单位有没有权利追究违约金呢?- 法律快车法律咨询...
  8. Qt ui-setupUi(this)的作用
  9. 光电整纬机(日本世联电子株式会社)
  10. java中为什么同步_如何在Java中同步工作