您的位置:时时app平台注册网站 > web前端 > cookie之困

cookie之困

2019-11-08 03:48

  2.存储限制4k

其中的键值对分割符为&,当然可以自定义一个分隔符,但用asp.net获取时是以&为分割符。

图片 1图片 2Code
function SetCookie(name, value, expires, path, domain, secure) {  var today = new Date();  today.setTime(today.getTime());  if(expires) { expires *= 86400000; }  var expires_date = new Date(today.getTime()   (expires));  document.cookie = name   "="   escape(value)      (expires ? ";expires="   expires_date.toGMTString() : "")      (path ? ";path="   path : "")      (domain ? ";domain="   domain : "")      (secure ? ";secure" : "");}

      ; secure

含多个子键值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存一个自定义的多键值字符串,

function GetCookie(name) {  var cookies = document.cookie.split( ';' );  var cookie = '';
  for(var i=0; i<cookies.length; i ) {    cookie = cookies[i].split('=');    if(cookie[0].replace(/^s |s $/g, '') == name) {      return (cookie.length <= 1) ? "" : unescape(cookie[1].replace(/^s |s $/g, ''));    }  }  return null;}

 1         /**
 2          * [setCookie 设置cookie]
 3          * @param {[String]} c_name  [起个名,独一无二的名字]
 4          * @param {[String]} c_value [需要存的值]
 5          * @param {[Number]} exdays  [时间/天数,设置保存时间  0时为删除]
 6          */
 7         function setCookie(c_name, c_value, exdays) {
 8             document.cookie = c_name   "="   encodeURIComponent(c_value)   "; max-age="   (exdays*60*60*24);// 解决符号转码
 9         }
10 
11         /**
12          * 读取cookies
13          * @param  {[String]} c_name [读取名字]
14          * @return {[String]}        [返回读取cookie的值]
15          */
16         function getCookie(c_name) {
17             var name = c_name   "=";
18             var ca = document.cookie.split(';');
19             for (var i = 0; i < ca.length; i  ) {
20                 var c = decodeURIComponent(ca[i].trim());// 解码
21                 if (c.indexOf(name) == 0){
22                     return c.substring(name.length, c.length);
23                 }
24             }
25             return "";
26         }
27 
28         // 使用示例
29         var username = document.getElementById("username"); // 获取input username
30         var userpwd = document.getElementById("userpassword"); // 获取input userpassword
31         var remember = document.getElementById("remember"); // 获取记住账号密码
32 
33         /**
34          * 点击复选框记住 账号、密码、复选框
35          */
36         function rememberValue() {
37             if (remember.checked == true) {
38                 setCookie('user', username.value);// 临时
39                 setCookie('pwd', userpwd.value, 30);
40                 setCookie('remember', remember.checked, 30);
41             } else {
42                 setCookie("user","",0);
43                 setCookie("pwd","",0);
44                 setCookie("remember","",0);
45             }
46         }
47 
48         /**
49          * 页面加载完毕后从cookie里读取值并填入相应的标签内
50          */
51         window.onload = function () {
52             username.value = getCookie("user");
53             userpwd.value = getCookie("pwd");
54             remember.checked = getCookie("remember");
55         }

相同domain和path的cookie放在同一个文件中,并用*号隔开,当然,其实并不用关心存储方式,不同的浏览器存储方式也不一样。

function DelCookie(name, path, domain) {  document.cookie = name   "="      (path ? ";path="   path : "")      (domain ? ";domain="   domain : "")      ";expires=Thu, 01-Jan-1970 00:00:01 GMT";}

      ; path=path

子domain,path与父domain, path下最好不要出现同名的cookie,不然容易出错,因为没有这方面的规定,不同的浏览器和服务端使用不同的策略读

    cookie后可接

domain和path都要满足匹配规则时,才会读取相应的cookie

源码可以到GitHub上下载!

含值键值对的cookie:以前一直用的是nam=value单键值对的cookie,一说到含多个子键值对的就蒙了。现在总算弄清楚了。

JS操作cookies方法 :

cookie写入时是带属性的,即response header: set-cookie是带属性的

  1.cookie若不设置过期时间关闭浏览器后会自动清除数据

cookie三元组(name,domain,path),它唯一确定一个cookie,三元组相同时,就是同一个cookie,不同时,就是不同的cookie,一般来说,

  3.同地址下其他文件也能读取到

domain匹配:机制跟面向对象编程的继承很像,也就是说子domain可以访问父domain的cookie,当domain=.baidu.com时,表示所有二级域名比如www.baidu.com都可以访问该cookie

      ; domain=domain

参见

 

path匹配:机制跟面向对象编程的继承很像,子path可以访问父path的cookie,比如path=/test/hello/可以访问path=/test/的cookie,当path=/时,表示,所有目录子可以访问该cookie

    cookie用字符串拼接即可

cookie的访问有一个同源策略,以(domain,path)来判断,不区分端口和http还是https

cookie读取出来后是不带domain,name属性的,即request header :cookie中不带属性

本文由时时app平台注册网站发布于web前端,转载请注明出处:cookie之困

关键词: