栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Javascript getCookie函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Javascript getCookie函数

W3CSchool的函数错误。如果存在多个具有相同后缀的cookie,则失败:

ffoo=bar; foo=baz

当您搜索

foo
它时,将返回 ffoo 而不是 foo 的值。

现在,这就是我要做的事情:首先,您需要了解cookie传输方式的语法。Netscape的原始规范(haxx.se上只有这样的副本可用)使用分号分隔多个cookie,而每个名称/值对具有以下语法:

名称

=
值此

字符串是一个字符序列,不包括分号,逗号和空格。如果需要在名称或值中放置此类数据,

%XX
则建议使用某些编码方法,例如URL样式编码,尽管未定义或不需要编码。

因此,

document.cookie
以分号或逗号分隔字符串是一个可行的选择。

除此之外,RFC 2109还规定了cookie用分号或逗号分隔:

cookie          =       "cookie:" cookie-version  1*((";" | ",") cookie-value)cookie-value    =       NAME "=" VALUE [";" path] [";" domain]cookie-version  =       "$Version" "=" valueNAME =       attrVALUE=       valuepath =       "$Path" "=" valuedomain          =       "$Domain" "=" value

尽管两者都允许,但最好使用逗号,因为逗号是HTTP中列表项的默认分隔符。

注意:为了向后兼容,cookie标头中的分隔符

;
到处都是分号()。服务器还应接受逗号(
,
)作为cookie值之间的分隔符,以实现将来的兼容性。

此外,名称/值对还有一些其他限制,因为 VALUE 也可以是RFC
2616中
指定的带引号的字符串:

attr        =     tokenvalue       =     token | quoted-string

因此,这两个cookie版本需要分别处理:

if (typeof String.prototype.trimLeft !== "function") {    String.prototype.trimLeft = function() {        return this.replace(/^s+/, "");    };}if (typeof String.prototype.trimRight !== "function") {    String.prototype.trimRight = function() {        return this.replace(/s+$/, "");    };}if (typeof Array.prototype.map !== "function") {    Array.prototype.map = function(callback, thisArg) {        for (var i=0, n=this.length, a=[]; i<n; i++) { if (i in this) a[i] = callback.call(thisArg, this[i]);        }        return a;    };}function getcookies() {    var c = document.cookie, v = 0, cookies = {};    if (document.cookie.match(/^s*$Version=(?:"1"|1);s*(.*)/)) {        c = RegExp.$1;        v = 1;    }    if (v === 0) {        c.split(/[,;]/).map(function(cookie) { var parts = cookie.split(/=/, 2),     name = depreURIComponent(parts[0].trimLeft()),     value = parts.length > 1 ? depreURIComponent(parts[1].trimRight()) : null; cookies[name] = value;        });    } else {        c.match(/(?:^|s+)([!#$%&'*+-.0-9A-Z^`a-z|~]+)=([!#$%&'*+-.0-9A-Z^`a-z|~]*|"(?:[x20-x7Ex80xFF]|\[x00-x7F])*")(?=s*[,;]|$)/g).map(function($0, $1) { var name = $0,     value = $1.charAt(0) === '"'    ? $1.substr(1, -1).replace(/\(.)/g, "$1")    : $1; cookies[name] = value;        });    }    return cookies;}function getcookie(name) {    return getcookies()[name];}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442209.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号