自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一日一技:前端與后端都是怎么讀寫 Cookies 的?

開發(fā) 前端
無論使用前端方式還是后端方式,你都可以通過在 Cookies 里面儲存一些信息,來實現(xiàn)某些開關(guān)或者記錄一些信息。

[[410252]]

大家應(yīng)該看過一些網(wǎng)站,在第一次訪問的時候,它會彈出一些小提示或者操作指導(dǎo),類似于下圖所示:

當我關(guān)閉了這個提示以后,接下來它都不會彈出來。當我關(guān)閉了瀏覽器再打開,它也不會再彈出來。但是,大家觀察截圖右上角,可以看到我并沒有登錄,那么網(wǎng)站是怎么“記住”了我關(guān)閉這個提示的呢?實際上是通過 Cookies 來記錄的。當我點擊X 關(guān)閉這個提示的時候,網(wǎng)站的JavaScript 會往 Cookies 里面寫入一條標記。當我們每次打開這個網(wǎng)站新的頁面的時候,它都會判斷一下 Cookies 里面有沒有這個標記。如果沒有這個標記,就彈出提示。如果有這個標記,就不彈出。

Cookies 本質(zhì)上是一個長字符串,里面使用分號隔開了很多項,每一項由 Key 和 Value 組成,叫做一個 Cookie。

要不要彈出提示的開關(guān)在這里

當我們要往 Cookies 里面添加一條 Cookie 有兩種常用方式:使用 JavaScript 或者通過后端設(shè)置。

使用 JavaScript 讀寫 Cookies

讀取當前所有的 Cookies,可以使用代碼:

  1. document.cookie 

運行效果如下圖所示:

需要注意的是,如果你要判斷某個鍵值是不是在 Cookies 里面,那么你需要做字符串匹配。這不能像 Object 一樣直接根據(jù) Key 去找 Value 或者判斷 Key 在不在里面。

要寫入一條 Cookie,我們可以使用代碼:

  1. document.cookie = 'key=value' 

例如:

這里我們使用document.cookie=新的值,看起來像是覆蓋了整個 Cookies,但實際上并不是這樣。如果你新增的 key 跟已有的相同,那么會覆蓋原有的這一個 Cookie的值,不影響其他的 Cookie;如果你新增的 key 不在原來的 Cookies 里面,那么它將會被添加到末尾。

使用 FastAPI讀寫 Cookies

還有一種方式是在后端設(shè)置 Cookies,我們以 FastAPI 為例來進行演示:

首先是向瀏覽器寫入 Cookies,使用的代碼如下:

  1. from fastapi import FastAPI, Response 
  2.  
  3.  
  4. app = FastAPI() 
  5.  
  6. @app.get('/'
  7. def index(response: Response, name: str = ''): 
  8.     if not name
  9.         name = 'kingname' 
  10.     response.set_cookie('name'name
  11.     return {'success'True'msg''網(wǎng)站正常運行'

這段代碼的關(guān)鍵是路由函數(shù)的第一個參數(shù)response: Response。它的值是一個Response對象。我們只需要調(diào)用這個對象的.set_cookie方法,就能把自定義的 Cookie 添加進去。需要注意的是,你不需要主動返回這個 response 對象。

運行效果如下圖所示,分別演示了有URL參數(shù)和沒有URL參數(shù)的情況。

沒有 URL 參數(shù)

有 URL 參數(shù)

至于讀取 Cookies 也非常簡單,并且還可以根據(jù) Key 指定要哪幾項:

  1. from typing import Optional 
  2. from fastapi import FastAPI, Cookie 
  3.  
  4.  
  5. app = FastAPI() 
  6.  
  7. @app.get('/'
  8. def index(name: str = '', info: Optional[str] = Cookie(None)): 
  9.     if not name
  10.         name = 'kingname' 
  11.     msg = f'{name} 你好,你的 Cookies中的info字段的值是: {info}' 
  12.     return {'success'True'msg': msg} 

我們注意到參數(shù)中有一項叫做info,這個參數(shù)名字就對應(yīng)了 Cookies 中某一項的 Key。只有這個 Key 存在,這個 info 參數(shù)才會有值,否則它就是 None。

運行效果如下圖所示:

如果你想從 Cookies 中拿多項,那么你可以多寫幾個參數(shù):

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

運行效果如下圖所示:

總結(jié)

無論使用前端方式還是后端方式,你都可以通過在 Cookies 里面儲存一些信息,來實現(xiàn)某些開關(guān)或者記錄一些信息。

本文轉(zhuǎn)載自微信公眾號「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關(guān)推薦

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2021-10-15 21:08:31

PandasExcel對象

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2021-04-05 14:47:55

Python多線程事件監(jiān)控

2024-11-13 09:18:09

2022-03-12 20:38:14

網(wǎng)頁Python測試

2021-04-12 21:19:01

PythonMakefile項目

2021-03-18 23:28:45

Python反斜杠字符串

2023-10-28 12:14:35

爬蟲JavaScriptObject

2021-03-12 21:19:15

Python鏈式調(diào)用

2021-09-13 20:38:47

Python鏈式調(diào)用

2021-04-19 23:29:44

MakefilemacOSLinux

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2024-07-19 18:23:17

2021-05-08 19:33:51

移除字符零寬

2024-11-11 00:38:13

Mypy靜態(tài)類型

2021-07-27 21:32:57

Python 延遲調(diào)用

2021-10-03 20:08:29

HTTP2Scrapy

2024-05-24 09:07:06

JSONprint字符串
點贊
收藏

51CTO技術(shù)棧公眾號