网易首页 > 网易号 > 正文 申请入驻

一日一技:前端与后端都是怎么读写 Cookies 的?

0
分享至

作者: kingname 来源:未闻Code

大家应该看过一些网站,在第一次访问的时候,它会弹出一些小提示或者操作指导,类似于下图所示:

当我关闭了这个提示以后,接下来它都不会弹出来。当我关闭了浏览器再打开,它也不会再弹出来。但是,大家观察截图右上角,可以看到我并没有登录,那么网站是怎么“记住”了我关闭这个提示的呢?实际上是通过 Cookies 来记录的。当我点击X 关闭这个提示的时候,网站的JavaScript 会往 Cookies 里面写入一条标记。当我们每次打开这个网站新的页面的时候,它都会判断一下 Cookies 里面有没有这个标记。如果没有这个标记,就会弹出提示。如果有这个标记,就不弹出。

Cookies 本质上是一个长字符串,里面使用分号隔开了很多项,每一项由 Key 和 Value 组成,叫做一个 Cookie。

要不要弹出提示的开关在这里

当我们要往 Cookies 里面添加一条 Cookie 有两种常用方式:使用 JavaScript 或者通过后端设置。

使用 JavaScript 读写 Cookies

读取当前所有的 Cookies,可以使用代码:

  1. document.cookie

运行效果如下图所示:

需要注意的是,如果你要判断某个键值是不是在 Cookies 里面,那么你需要做字符串匹配。这不能像 Object 一样直接根据 Key 去找 Value 或者判断 Key 在不在里面。

要写入一条 Cookie,我们可以使用代码:

document.cookie = 'key=value'

例如:

这里我们使用document.cookie=新的值,看起来像是覆盖了整个 Cookies,但实际上并不是这样。如果你新增的 key 跟已有的相同,那么会覆盖原有的这一个 Cookie的值,不影响其他的 Cookie;如果你新增的 key 不在原来的 Cookies 里面,那么它将会被添加到末尾。

使用 FastAPI读写 Cookies

还有一种方式是在后端设置 Cookies,我们以 FastAPI 为例来进行演示:

首先是向浏览器写入 Cookies,使用的代码如下:

from fastapi import FastAPI, Response
app = FastAPI()
@app.get('/')
def index(response: Response, name: str = ''):
if not name:
name = 'kingname'
response.set_cookie('name', name)
return {'success': True, 'msg': '网站正常运行'}

这段代码的关键是路由函数的第一个参数response: Response。它的值是一个Response对象。我们只需要调用这个对象的.set_cookie方法,就能把自定义的 Cookie 添加进去。需要注意的是,你不需要主动返回这个 response 对象。

运行效果如下图所示,分别演示了有URL参数和没有URL参数的情况。

没有 URL 参数

有 URL 参数

至于读取 Cookies 也非常简单,并且还可以根据 Key 指定要哪几项:

from typing import Optional
from fastapi import FastAPI, Cookie
app = FastAPI()
@app.get('/')
def index(name: str = '', info: Optional[str] = Cookie(None)):
if not name:
name = 'kingname'
msg = f'{name} 你好,你的 Cookies中的info字段的值是: {info}'
return {'success': True, 'msg': msg}

我们注意到参数中有一项叫做info,这个参数名字就对应了 Cookies 中某一项的 Key。只有这个 Key 存在,这个 info 参数才会有值,否则它就是 None。

运行效果如下图所示:

如果你想从 Cookies 中拿多项,那么你可以多写几个参数:

@app.get('/')
def index(name: str = '', info: Optional[str] = Cookie(None), is_new_user: Optional[bool] = Cookie(False)):
if not name:
name = 'kingname'
msg = f'{name} 你好,你的 Cookies中的info字段的值是: {info}, 是新用户吗:{is_new_user}'
return {'success': True, 'msg': msg}

运行效果如下图所示:

无论使用前端方式还是后端方式,你都可以通过在 Cookies 里面储存一些信息,来实现某些开关或者记录一些信息。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
1981年,他被连队关禁闭借故爬上大树解闷,一亮光改变了他的人生

1981年,他被连队关禁闭借故爬上大树解闷,一亮光改变了他的人生

百年历史老号
2024-06-12 07:38:26
160枚火箭弹从天而降,以军司令部被炸,美英法德集体失声

160枚火箭弹从天而降,以军司令部被炸,美英法德集体失声

简读视觉
2024-06-16 20:05:02
2024年起,个人存款超过100万以上家庭,不得不面对四大问题

2024年起,个人存款超过100万以上家庭,不得不面对四大问题

平说财经
2024-06-16 06:14:51
美媒:中国已经“出手”了,而美国感到紧张了

美媒:中国已经“出手”了,而美国感到紧张了

新时光点滴
2024-06-16 04:40:02
欧倩怡称和郭晋安仍是家人,感谢前夫供养自己上学,揭离婚原因

欧倩怡称和郭晋安仍是家人,感谢前夫供养自己上学,揭离婚原因

娱记掌门
2024-06-16 17:29:36
广西桂林:分阶段执行住房“以旧换新”,9月1日起增加国企收购方式

广西桂林:分阶段执行住房“以旧换新”,9月1日起增加国企收购方式

澎湃新闻
2024-06-13 20:54:29
北京市消协发布休闲服装比较试验结果 诺帝卡、拉夏贝尔等10件样品存在质量问题 2件样品为冒牌货

北京市消协发布休闲服装比较试验结果 诺帝卡、拉夏贝尔等10件样品存在质量问题 2件样品为冒牌货

半岛官网
2024-06-16 13:10:24
将船拖走!中方下达最后通牒!西部战区司令被撤职,菲方彻底慌了

将船拖走!中方下达最后通牒!西部战区司令被撤职,菲方彻底慌了

慎独赢
2024-05-24 13:05:54
俄军士兵逃离前线尸横遍野,乌克兰收复利皮失地震惊世界

俄军士兵逃离前线尸横遍野,乌克兰收复利皮失地震惊世界

亡海中的彼岸花
2024-06-13 09:48:01
刘亦菲妈妈国外游玩!65岁似40岁,比刘亦菲还漂亮

刘亦菲妈妈国外游玩!65岁似40岁,比刘亦菲还漂亮

综艺拼盘汇
2024-06-16 17:05:45
俄罗斯空袭基辅,北约战机接连升空,普京用行动试出了西方的底线

俄罗斯空袭基辅,北约战机接连升空,普京用行动试出了西方的底线

晓辉观点
2024-06-16 18:00:20
【医疗机构】北京市骨科排名靠前的17所著名和主要医院名单

【医疗机构】北京市骨科排名靠前的17所著名和主要医院名单

今日养生之道
2024-06-16 15:35:10
官宣!民宿出租新规:7月1日起,你可能只能出租90天!

官宣!民宿出租新规:7月1日起,你可能只能出租90天!

维城
2024-06-14 19:10:59
那些年手感最好的十二部手机,你用过哪几款?

那些年手感最好的十二部手机,你用过哪几款?

最潮家居评
2024-06-16 16:38:15
鲁能大牌新归化夏窗正式到位,将锁定主力指挥官位置,本人已同意

鲁能大牌新归化夏窗正式到位,将锁定主力指挥官位置,本人已同意

罗掌柜体育
2024-06-15 19:35:29
天津自助餐风波:15元吃出“天价”时间,老板发飙轰客

天津自助餐风波:15元吃出“天价”时间,老板发飙轰客

历史有些冷
2024-06-16 20:30:02
专家分析得出:一旦核战爆发,中国3个地方可躲灾难,一定要知道

专家分析得出:一旦核战爆发,中国3个地方可躲灾难,一定要知道

文史达观
2024-06-14 21:35:17
预备役人员选拔,开始了!

预备役人员选拔,开始了!

一号哨位
2024-06-05 21:57:30
上海申花击败成都蓉城,武汉三镇击败青岛西海岸队

上海申花击败成都蓉城,武汉三镇击败青岛西海岸队

二郎神侃球
2024-06-16 20:05:22
现世报?内塔尼亚胡刚否认中国救过犹太人!上海就关闭了百年建筑

现世报?内塔尼亚胡刚否认中国救过犹太人!上海就关闭了百年建筑

大风文字
2024-05-11 15:31:29
2024-06-16 21:12:49
Nodejs开发
Nodejs开发
分享只有程序员懂的干货
648文章数 824关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

G7峰会上特鲁多口误:将努力确保乌克兰承担责任

头条要闻

G7峰会上特鲁多口误:将努力确保乌克兰承担责任

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

健康
本地
时尚
游戏
数码

晚餐不吃or吃七分饱,哪种更减肥?

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

伊姐周日热推:电影《沙漏》;动漫《眷思量2》......

IGN分享《AC影》弥助头盔推文 网友:他不是武士

数码要闻

三星 Galaxy Watch Ultra 手表渲染图曝光:方中带圆,灰银两色

无障碍浏览 进入关怀版