
function getCookie(a){
var b = "";
var c = a + "=";
var d = documentcookie;
if (dlength > 0) {
g = dindexOf(c);
if (g != -1) {
g += clength;
f = dindexOf(";", g);
if (f == -1)
f = dlength;
b = unescape(dsubstring(g, f));
};
};
return b;
},
正常情况下,浏览器禁止跨域获取cookie
一般通过sso服务可以实现取得跨域cookie,思路如下:
域A页面访问位于域A的服务器,对权限进行验证
域A服务器于域B服务器通信,记录一个唯一的加密串用作身份验证域(并将cookie信息发送给域B服务器)
域A服务器返回302跳转,跳转到域B下,并将加密串作为url的一部分
页面由域A跳转到域B,域B服务器通过加密串获取到事先从域A服务器上得到的cookie信息,并在响应头中添加set-cookie字段设置cookie
cookie只能以字符串存储,而且有长度限制问题,一般长度就4000多点的字节。如果是比较大的对象序列化时长度是不够的,而且JS中复杂的对象是没法序列化的。如果只是想保存对象的几个属性,你完全不用保存整个对象,比如你要保存一个对象的"name"和"size"属性,你可以这样保存这样:"name:xxxx|size:xxxx",或者保存成JOSN格式:'{"name":"xxxx","size":"xxxx"}'。然后重新加载页面的时候,解析COOKIE字符串获取到里面的值,在对象初始化时将这些值赋值上去。
如果你只是简单的对象,类似这种:{name:"xxxx",size:xxxx},你可以直接转成JOSN格式保存
在 JS(JavaScript) *** 作cookies比较复杂,在 ASP 里面我们只需要知道 cookie 的名称、cookie 的值就行了,而 JS 里面,我们面对的是 cookie 的字符串,你自己编写这个字符串写入客户端,然后自己解析这个字符串。
一、从写 cookie 说起。
var the_date = new Date("December 31, 2020");
var expiresDate = the_datetoGMTString();
documentcookie = "userDefineCSS=" + escape(title) + "; expires=" + expiresDate;
第一句是日期对象;
第二句将日期格式转换成 GMT 格式;编者者: GMT 即格林威治标准时间,现在也称 UTC 即全球标准时间。
第三句是将 cookie 内容写入客户端。
其中 expires 是系统使用的,表示 cookie 的失效日期(也可以省略),expires 不可读。
escape 是对 cookie 值进行编码,这是为了处理中文、空格等而设立的。
二、取 cookie 是比较简单的。
function GetCSS()
{
var cookieStr = documentcookie; //取 cookie 字符串,由于 expires 不可读,所以 expires 将不会出现在 cookieStr 中。
if (cookieStr == "")
{
return "main1"; //没有取到 cookie 字符串,返回默认值
}
var cookieValue = cookieStrsplit("; "); //将各个 cookie 分隔开,并存为数组,多个 cookie 之间用分号加空隔隔开,不过前面我们只使用了一个 cookie,它的值与 expires 之间也是用分号加空格隔开的
var varName = "userDefineCSS";
var startPos = -1;
var endPos = -1;
for (var i=0; i<cookieValuelength; i++)
{
startPos = cookieValue[i]indexOf(varName);
if (startPos != 0)
{
continue; //当前 cookie 不是名称为 varName 的 cookie,判断下一个 cookie
}
startPos += varNamelength + 1; //当前 cookie 就是名称为 varName 的 cookie,由于有等号,所以 +1
endPos = cookieValue[i]length;
var css = unescape(cookieValue[i]substring(startPos, endPos));
return css;
}
return "main1";
}
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="keywords" content="字符串,对象,如果,服务器,里面">
<title>白菜编辑部</title>
<style type="text/css">
</style>
<script type="text/javascript">
function readCookie (name)
{
var cookieValue = "";
var search = name + "=";
if (documentcookielength > 0)
{
offset = documentcookieindexOf (search);
if (offset != -1)
{
offset += searchlength;
end = documentcookieindexOf (";", offset);
if (end == -1)
end = documentcookielength;
cookieValue = unescape (documentcookiesubstring (offset, end))
}
}
return cookieValue;
}
function writeCookie (name, value, hours)
{
var expire = "";
if (hours != null)
{
expire = new Date ((new Date ())getTime () + hours 3600000);
expire = "; expires=" + expiretoGMTString ();
}
documentcookie = name + "=" + escape (value) + expire;
}
writeCookie ("myCookie", "my name", 24);
alert (readCookie ("myCookie"));
</script>
</head>
<body>
</body>
</html>
这里的SetCookie 是自己定义的一个函数
如:
function setCookie(name, value, expire) {
windowdocumentcookie = name + "=" + escape(value) + ((expire == null) "" : ("; expires=" + expiretoGMTString()));
}
所以里面的这些参数都是直接定义的JS只有windowdocumentcookie 定义cookie的方法至于里面的值 直接定义
用documentcookie 获取当前域名下的cookie。具体代码如下:
var mycookie = documentcookie
它读出来是一串字符串,包含当前域名下的所有cookie,解析字符串可以得到cookie值
documentcookie这个。
documentcookie 的内容如果是这样:
Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"
var aCookie = documentcookiesplit("; ")
用"; "分割字符串,得到一个数组:
[
Customer="WILE_E_COYOTE"
Version="1"
Path="/acme"
]
for (var j=0; j < aCookielength; j++){
// 对aCookie每一项,用"="分割
// 如果"="前面的字符串等于参数 sName,就返回"="后面的内容
}
如果 aCookie 中找不到 sName,就返回 null。
以上就是关于关于js读取cookie全部的内容,包括:关于js读取cookie、如何用js实现跨域获取cookie、js cookie 存的对象,取出来怎么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)