JS中cookie的使用及缺点讲解
发布时间 - 2026-01-11 01:06:20 点击率:次什么是Cookie

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Cookie机制
在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。
而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。
Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。
JS设置cookie:
假设在A页面中要保存变量username的值("jack")到cookie中,key值为name,则相应的JS代码为:
document.cookie="name="+username;
在cookie 的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格。在cookie的名中做到这点很容易,但要保存的值是不确定的。如何来存储这些值呢?方 法是用escape()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储于cookie值中,而且使用此 种方案还可以避免中文乱码的出现。
document.cookie="str="+escape("I love ajax");
// document.cookie="str=I%20love%20ajax";
当使用escape()编码后,在取出值以后需要使用unescape()进行解码才能得到原来的cookie值,
JS读取cookie:
假设cookie中存储的内容为:name=jack;password=123
则在B页面中获取变量username的值的JS代码如下:
var username=document.cookie.split(";")[0].split("=")[1];
//JS操作cookies方法!
//写cookies
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
读取cookies
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
删除cookies
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null)
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
//使用示例
setCookie("name","hayden");
alert(getCookie("name"));
//如果需要设定自定义过期时间
//那么把上面的setCookie 函数换成下面两个函数就ok;
//程序代码
function setCookie(name,value,time)
{
var strsec = getsec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec*1);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getsec(str)
{
alert(str);
var str1=str.substring(1,str.length)*1;
var str2=str.substring(0,1);
if (str2=="s")
{
return str1*1000;
}
else if (str2=="h")
{
return str1*60*60*1000;
}
else if (str2=="d")
{
return str1*24*60*60*1000;
}
}
//这是有设定过期时间的使用示例:
//s20是代表20秒
//h是指小时,如12小时则是:h12
//d是天数,30天则:d30
setCookie("name","hayden","s20");
Cookie缺点
cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的。
第一:每个特定的域名下最多生成20个cookie
1.IE6或更低版本最多20个cookie
2.IE7和之后的版本最后可以有50个cookie。
3.Firefox最多50个cookie
4.chrome和Safari没有做硬性限制
IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie。
cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节。
IE 提供了一种存储可以持久化用户数据,叫做uerData,从IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在。
优点:极高的扩展性和可用性
1.通过良好的编程,控制保存在cookie中的session对象的大小。
2.通过加密和安全传输技术(SSL),减少cookie被破解的可能性。
3.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
4.控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。
缺点:
1.`Cookie`数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
以上所述是小编给大家介绍的JS中cookie的使用及缺点讲解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
# js
# cookie使用
# cookie的缺点
# JS 设置Cookie 有效期 检测cookie
# node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
# JS使用cookie实现只出现一次的广告代码效果
# javascript 中Cookie读、写与删除操作
# PHP如何读取由JavaScript设置的Cookie
# jquery.cookie.js的介绍与使用方法
# js cookie实现记住密码功能
# javascript cookie的基本操作(添加和删除)
# 客户端
# 最多
# 放在
# 购物车内
# 不能超过
# 小编
# 这是
# 就会
# 也不
# 是一种
# 会有
# 不可能
# 还可以
# 是有
# 就能
# 将会
# 这就是
# 是由
# 则是
# 被人
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在云主机上快速搭建多站点网站?
轻松掌握MySQL函数中的last_insert_id()
如何构建满足综合性能需求的优质建站方案?
利用python获取某年中每个月的第一天和最后一天
如何获取上海专业网站定制建站电话?
Laravel如何自定义错误页面(404, 500)?(代码示例)
个人网站制作流程图片大全,个人网站如何注销?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
Laravel中的Facade(门面)到底是什么原理
公司网站制作价格怎么算,公司办个官网需要多少钱?
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel怎么调用外部API_Laravel Http Client客户端使用
如何快速搭建高效WAP手机网站吸引移动用户?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Laravel如何创建自定义Artisan命令?(代码示例)
如何用wdcp快速搭建高效网站?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何在Tomcat中配置并部署网站项目?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何为不同团队 ID 动态生成多个独立按钮
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
如何快速上传建站程序避免常见错误?
长沙做网站要多少钱,长沙国安网络怎么样?
Python文本处理实践_日志清洗解析【指导】
如何快速生成高效建站系统源代码?
智能起名网站制作软件有哪些,制作logo的软件?
制作旅游网站html,怎样注册旅游网站?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Angular 表单中正确绑定输入值以确保提交与验证正常工作
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
javascript基本数据类型及类型检测常用方法小结
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何正确下载安装西数主机建站助手?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
PythonWeb开发入门教程_Flask快速构建Web应用

