一、优缺点
缺点:1、不能跨域
什么是跨域?指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
举个��:主域名、端口、协议等因素
http://www.123.com/index.html 调用 http://www.123.com/server.PHP (非跨域)
http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)
http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)
http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)
请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。
2、储存空间比较小 4KB
3、数量限制 每一个域名下最多建20个
4、用户可以清除cookie 客户端还可以禁用cookie
优点:1、访问比较方便 可通过request、cookie、header 中获取
2、可以设置path
3、可以设置secure属性 只能在https访问 防止XSS
4、可以说httponly属性 服务端可以设置 js无法设置
cookie的应用场景
cookie的属性
cookie的增删改查
服务端设置cookie
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
JS设置cookie
var cookie = {
getCookie: function (key) {
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
},
setCookie: function (opts) {
if (Object.prototype.toString.call(opts) !== "[object Object]") {
return;
}
if (!opts.key) {
return;
}
if (!opts.value) {
opts.value = '';
}
var tmp = opts.key + '=' + encodeURIComponent(opts.value) + ';';
if (opts.expires) {
tmp += 'expires=' + new Date(new Date().getTime() + opts.expires * 1000).toGMTString() + ';';
}
if (opts.path) {
tmp += ('path=' + opts.path + ';');
}
if (opts.domain) {
tmp += ('domain=' + opts.domain + ';');
}
if (opts.secure) {
tmp += 'secure'
}
document.cookie = tmp;
},
delCookie: function (opts) {
cookie.setCookie({
key: opts.key,
value: '',
expired: -1000000000,
path: opts.path,
domain: opts.domain,
})
},
}其他
判断是否启用cookie
if (!navigator.cookieEnabled) { // 让用户知道,开启网页中的cookies是很有必要的. }是否可以直接修改header中的cookie字段?
cookie自动删除
参考资料