Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >js中的操作cookie的方法

js中的操作cookie的方法

作者头像
用户9914333
发布于 2022-07-22 06:46:37
发布于 2022-07-22 06:46:37
5.2K10
代码可运行
举报
文章被收录于专栏:bug收集bug收集
运行总次数:0
代码可运行

01 cookie介绍

JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。

JavaScript 中,创建 cookie 如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.cookie="username=John Doe";

您还可以为 cookie 添加一个过期时间(以 UTC 或 GMT 时间)。

默认情况下,cookie 在浏览器关闭时删除:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.cookie="username=John Doe;expires=Thu, 18 Dec 2043 12:00:00 GMT";

您可以使用 path 参数告诉浏览器 cookie 的路径。默认情况下,cookie 属于当前页面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

02 原生js操作cookie

在 JavaScript 中, 可以使用以下代码来读取 cookie:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var x = document.cookie;

cookie 的操作,添加,修改,删除等,没有提供对应的方法,需要自己去处理document.cookie中的字符串。

可参考如下代码:

//设置cookie, 参数:键,值 ,有效时间:单位天

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function setCookie(cname,cvalue,exdays){
    var d = new Date();
    d.setTime(d.getTime()+(exdays*24*60*60*1000));
    var expires = "expires="+d.toGMTString();
    document.cookie = cname+"="+cvalue+"; "+expires;
}

//获取cookie值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getCookie(cname){
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
    }
    return "";
}

03 jQuery Cookie

jQuery Cookie 是一个简单、轻巧的jQuery插件,主要用于读取,编写和删除cookie。因为是主要是为了增强jQuery的功能,因此对于许多之前用过jQuery的同学而言,其使用起来更加的方便。

要想使用jQuery Cookie,首先要在页面上引入两个JS文件,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

下面我们来看下使用jQuery Cookie是如何操作Cookie的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建一个Cookie,属性默认
$.cookie('password', '123456');
//创建一个Cookie,设置属性:有效天数,path
$.cookie('attribute', 'pathDomain', { expires: 7, path: '/' });
//读取所有Cookie,返回{name1:value1,...,namen:valuen}  JSON格式
$.cookie();
//获取指定name的Cookie的值
$.cookie("password");
//修改Cookie,重新创建一遍,name相同会覆盖之前Cookie,修改了过期时间
$.cookie('attribute', 'pathDomain', { expires: 14, path: '/' });
//删除Cookie,可以指定过期时间为当前时间;注意:因为过期时间以浏览器的服务器时间为准,一般会有八小时时差
$.removeCookie('password');

注意:如果创建Cookie时,指定了Cookie的path和domain属性,则删除时,同样需要传入相同的参数。

04 js-cookie

js-cookie一个简单、轻巧的处理Cookie的JavaScript的API。这么看来其和jQuery Cookie相差似乎不大,两个插件的体积也都不大,压缩后都是1Kb左右,但是js-cookie的一个优势就是不需要依赖jQuery,这样我们在使用Vue等其他前端框架时可以更方便的使用。

除了上述,js-cookie官网上对其介绍如下所述:

可以在所有浏览器上工作支持任何字符

经过严格的测试没有任何依赖

支持ES模块支持AMD/CommonJS

实用的wiki文档支持自定义编码/解码

体量小

下面就让我们一起来体验下js-cookie,

首先,在页面上引入JS文件,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script>

注:引入JS文件后,可以直接使用

之后我们就可以直接使用js-cookie提供的一个Cookie对象,其中提供了许多操作Cookie的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建一个Cookie,属性默认
Cookies.set('password', '123456');
//创建一个Cookie,设置属性:有效天数,path
Cookies.set('attribute', 'pathDomain', { expires: 7, path: '/' })
//读取所有Cookie,返回{name1:value1,...,namen:valuen}  JSON格式
Cookies.get();
//获取指定name的Cookie的值
Cookies.get("password");
//修改Cookie,重新创建一遍,name相同会覆盖之前Cookie,修改了过期时间
Cookies.set('attribute', 'pathDomain', { expires: 14, path: '/' })
//删除Cookie,可以指定过期时间为当前时间;注意:因为过期时间以浏览器的服务器时间为准,一般会有八小时时差
Cookies.remove("password");

我们可以发现js-cookie中的API的使用和jQuery Cookie是非常类似的,参数列表基本一致,因此使用起来也是上手很快。

需要注意的是,这里删除Cookie时,同样需要传入Cookie创建时相同的参数。

总结:

jQuery Cookie、js-cookie的使用方法,两者的使用非常类似,大家也可以根据自己的喜欢来选择,无论哪种,都会比原生的js要方便。这里还是比较推荐js-cookie,因为其不要依赖别的JS,当然还有许多别的好处。

参考:

https://www.runoob.com/js/js-cookies.html

https://blog.csdn.net/qq_34666857/article/details/105703529

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
nginx: [alert] failed to load the 'resty.core' module (https://github.com/openresty/lua-resty-core); ensure you are using an OpenResty release from https://openresty.org/en/download.html (reason: module 'resty.core' not found: 博主这个怎么解决 系统centos 7.9 nginx/1.25.3 OpenSSL 3.2.0-alpha2 启动报错
nginx: [alert] failed to load the 'resty.core' module (https://github.com/openresty/lua-resty-core); ensure you are using an OpenResty release from https://openresty.org/en/download.html (reason: module 'resty.core' not found: 博主这个怎么解决 系统centos 7.9 nginx/1.25.3 OpenSSL 3.2.0-alpha2 启动报错
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Openresty最佳案例 | 第7篇: 模块开发、OpenResty连接Redis
方志朋
2017/12/29
3K0
Nginx基础 - Nginx+Lua实现灰度发布与WAF
1.Nginx加载Lua环境 默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry
子润先生
2021/08/03
1.7K0
网站刚上线就被攻击了!
自己搭建的网站刚上线,短信接口就被一直攻击,并且攻击者不停变换IP,导致阿里云短信平台上的短信被恶意刷取了几千条,加上最近工作比较忙,就直接在OpenResty上对短信接口做了一些限制,采用OpenResty+Lua的方案成功动态封禁了频繁刷短信接口的IP。
冰河
2024/08/01
1230
网站刚上线就被攻击了!
Centos7 下 Openresty 从安装到入门
根据官网的描述提供了不同的安装方式,例如:使用yum安装、源码编译安装等等。我目前暂时使用yum安装方式进行部署看看。
Devops海洋的渔夫
2019/05/30
6.3K0
lua入门demo(HelloWorld+redis读取)
1. lua入门demo 1.1. 入门之Hello World!! 由于我习惯用docker安装各种软件,这次的lua脚本也是运行在docker容器上 openresty是nginx+lua的各种模
老梁
2019/09/10
7640
lua入门demo(HelloWorld+redis读取)
Nginx高级应用:lua + OpenResty
而对于首页这种,高访问,且 页面数据并不是,经常的变化! 为了减轻服务器的压力,直接将其制作成一个 静态的页面进行展示!
Java_慈祥
2024/08/06
2990
Nginx高级应用:lua + OpenResty
Nginx Lua Redis防止CC攻击
Nginx Lua Redis防止CC攻击实现原理:同一个外网IP、同一个网址(ngx.var.request_uri)、同一个客户端(http_user_agent)在某一段时间(CCseconds)内访问某个网址(ngx.var.request_uri)超过指定次数(CCcount),则禁止这个外网IP+同一个客户端(md5(IP+ngx.var.http_user_agent)访问这个网址(ngx.var.request_uri)一段时间(blackseconds)。
七辰
2023/10/01
5600
Nginx Lua Redis防止CC攻击
Openresty最佳案例 | 第3篇:Openresty的安装
方志朋
2017/12/29
2K0
Nginx Lua扩展模块
淘宝开发的 ngx_lua 模块通过将 Lua 解释器集成进 Nginx,可以采用 Lua 脚本实现业务逻辑,由于 Lua 的紧凑、快速以及内建协程,所以在保证高并发服务能力的同时极大地降低了业务逻辑实现成本。
用户9615083
2022/12/25
3.7K0
Nginx Lua扩展模块
Nginx与Lua
火云邪神语录:天下武功,无坚不破,唯快不破!Nginx的看家本领就是速度,Lua的拿手好戏亦是速度,这两者的结合在速度上无疑有基因上的优势。
LA0WAN9
2021/12/14
5150
Nginx + Lua搭建文件上传下载服务
本文介绍了Nginx在文件上传、下载以及大文件断点续传功能中的实践应用,同时介绍了一些与文件操作相关的系统调用和Lua模块的扩展用法。此外,还探讨了如何使用Nginx和Lua实现简单的文件下载服务和基于TCP的RPC调用。
庄进发
2017/04/20
6.4K0
Nginx + Lua搭建文件上传下载服务
Nginx添加开源防火墙(waf)防护
由于原生态的Nginx的一些安全防护功能有限,就研究能不能自己编写一个WAF,参考Kindle大神的ngx_lua_waf,自己尝试写一个了,使用两天时间,边学Lua,边写。不过不是安全专业,只实现了一些比较简单的功能:
王先森sec
2023/04/24
2.7K0
Nginx添加开源防火墙(waf)防护
openresty基于lua/geoIp/redis实现ip限制
一、问题背景二、聊一嘴ip库三、解决方案四、下载安装openresty五、验证效果六、geoIp自动更新七、参考
叔牙
2023/02/26
4.3K0
openresty基于lua/geoIp/redis实现ip限制
基于 Nginx+lua+Memcache 实现灰度发布
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
DevOps时代
2020/06/16
1K0
基于 Nginx+lua+Memcache 实现灰度发布
Nginx+Lua+Redis实现高性能缓存数据读取
前些日子,入手了本开涛写的《亿级流量网站架构核心技术》,里面提到nginx+lua相结合开发高并发、高负载下的服务,看着手痒就立个task,有时间尝试一翻,随手也把操作步骤记录下来,有兴趣的朋友也可以试试。
MavenTalker
2023/03/08
1.3K0
Nginx+Lua+Redis实现高性能缓存数据读取
亿级流量多级缓存 - Lua整合Redis/Nginx
Lua 是由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于1993年开发的一种轻量、小巧的脚本语言,用标准 C 语言编写,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Parker
2020/07/21
1.3K0
分布式--OpenResty+lua+Redis
前面我们已经使用了nginx,它拥有丰富的模块供我们使用,由于nginx是由c语言编写而成的,所以以前编写模块就必须使用c/c++,后来,有人将lua解释器继承到了nginx中,内建了ngx_lua模块,至此,nginx支持了lua
aruba
2022/06/30
7760
分布式--OpenResty+lua+Redis
Nginx安装lua-nginx-module
使用lua可以为nginx扩展出强大的能力,比如频率限制,访问redis等,本文介绍一下如何安装模块lua-nginx-module 编译安装 下载 wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz wget https://github.com/openresty/lua-nginx-module/archive/refs/tags/v0.10.20.tar.gz wget https://github.com/vision5/ngx_devel
十毛
2021/07/08
3.2K0
OpenResty Redis 安装部署测试SET GET功能
https://openresty.org/cn/installation.html
三杯水Plus
2018/11/14
8810
[记录点滴]OpenResty 支持http v2的问题
错误现象:无法上传图片,后台log是http v2 not supported yet。
罗西的思考
2020/09/07
1.5K0
相关推荐
Openresty最佳案例 | 第7篇: 模块开发、OpenResty连接Redis
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验