一個簡單,輕巧的JavaScript API,用於處理餅乾
如果您在https://github.com/js-cookie/js-cookie上查看此信息,則您正在閱讀主分支的文檔。查看最新版本的文檔。 ?
JavaScript Cookie以js-cookie
名義支持NPM。
npm i js-cookie
NPM軟件包具有一個module
字段,指向庫的ES模塊變體,主要是為ES模塊Aware Aware Bundlers提供支持,而其browser
字段則指向UMD模塊,以實現完整的向後兼容性。
並非所有瀏覽器本地都支持ES模塊。因此,NPM軟件包/發行版同時提供了ES和UMD模塊變體,您可能需要將ES模塊與UMD後備一起包括在內:
或者,通過JSDELIVR CDN包括JS-Cookie。
導入庫:
import Cookies from 'js-cookie'
// or
const Cookies = require ( 'js-cookie' )
在整個網站上創建一個有效的cookie:
Cookies . set ( 'name' , 'value' )
創建一個從現在起7天到期的cookie,在整個網站上有效:
Cookies . set ( 'name' , 'value' , { expires : 7 } )
創建一個到期的cookie,對當前頁面的路徑有效:
Cookies . set ( 'name' , 'value' , { expires : 7 , path : '' } )
閱讀cookie:
Cookies . get ( 'name' ) // => 'value'
Cookies . get ( 'nothing' ) // => undefined
閱讀所有可見的餅乾:
Cookies . get ( ) // => { name: 'value' }
注意:不可能通過傳遞一個cookie屬性來讀取特定的cookie(在撰寫有關cookie時可能會或可能不使用它):
Cookies . get ( 'foo' , { domain : 'sub.example.com' } ) // `domain` won't have any effect...!
如果從.get()可見,則只有在.get()
上可用foo
的cookie;讀取時域和/或路徑屬性不會產生效果。
刪除cookie:
Cookies . remove ( 'name' )
刪除有效到當前頁面路徑的cookie:
Cookies . set ( 'name' , 'value' , { path : '' } )
Cookies . remove ( 'name' ) // fail!
Cookies . remove ( 'name' , { path : '' } ) // removed!
重要的!刪除cookie並且不依賴默認屬性時,您必須通過完全相同的path
, domain
, secure
和sameSite
屬性,這些屬性用於設置cookie:
Cookies . remove ( 'name' , { path : '' , domain : '.yourdomain.com' , secure : true } )
注意:刪除不存在的cookie既不會引起任何例外,也不會返回任何值。
如果與命名空間Cookies
發生衝突的危險, noConflict
方法將允許您定義一個新的名稱空間並保留原始的空間。當在第三方站點上運行腳本時,這是一個特別有用的,例如,作為小部件或SDK的一部分。
// Assign the js-cookie api to a different variable and restore the original "window.Cookies"
var Cookies2 = Cookies . noConflict ( )
Cookies2 . set ( 'name' , 'value' )
注意:使用AMD或COMPORJS時,不需要使用.noConflict
方法,因此在這些環境中不會暴露出來。
該項目符合RFC 6265。使用cookie-name或cookie-value中不允許的所有特殊字符都使用每個人的UTF-8 HEX等效編碼使用百分比編碼。 cookie-name或cookie-value中唯一的字符是允許且仍在編碼的角色是%
字符,它被逃脫了,以將百分比輸入解釋為字面。請注意,默認的編碼/解碼策略只能在JS-Cookie讀/書寫的cookie之間進行互操作。要覆蓋默認編碼/解碼策略,您需要使用轉換器。
注意:根據RFC 6265,如果您的餅乾太大,或者同一域中的cookie太多,則可能會被刪除。
cookie屬性默認值可以通過通過withAttributes()
創建API的實例,也可以單獨使用Cookies.set(...)
通過將普通對像作為最後一個參數來設置。每個屬性覆蓋默認屬性。
定義何時刪除cookie。價值必須是一個Number
,該數字將被解釋為創建或Date
實例的天數。如果省略,cookie將成為會話cookie。
要創建一個在不到一天的時間內到期的餅乾,您可以檢查Wiki上的常見問題解答。
默認值:當用戶關閉瀏覽器時,將刪除cookie。
示例:
Cookies . set ( 'name' , 'value' , { expires : 365 } )
Cookies . get ( 'name' ) // => 'value'
Cookies . remove ( 'name' )
一個指示可見曲奇的路徑的String
。
預設: /
示例:
Cookies . set ( 'name' , 'value' , { path : '' } )
Cookies . get ( 'name' ) // => 'value'
Cookies . remove ( 'name' , { path : '' } )
有關Internet Explorer的注意:
由於基礎Wininet InternetgetCookie實現中的錯誤錯誤,IE的文檔。如果將其設置為包含文件名的路徑屬性,則Cookie將不會返回cookie。
(來自Internet Explorer Cookie內部(FAQ))
這意味著一個人不能使用window.location.pathname
設置路徑,以防該路徑名包含一個so: /check.html
之類的文件名(或者至少無法正確讀取此類cookie)。
實際上,您絕不應該允許不受信任的輸入設置cookie屬性,否則您可能會暴露於XSS攻擊。
一個指示有效域String
應在其中可見。所有子域也可以看到cookie。
默認值: cookie僅在創建cookie的頁面的域或子域中可見,除了Internet Explorer(見下文)。
示例:
假設在site.com
上創建的cookie:
Cookies . set ( 'name' , 'value' , { domain : 'subdomain.site.com' } )
Cookies . get ( 'name' ) // => undefined (need to read at 'subdomain.site.com')
有關Internet Explorer默認行為的注意:
Q3:如果我不指定域屬性(對於)cookie,則無論如何將其發送到所有嵌套子域嗎?答:是的,example.com上的cookie集將發送到sub2.sub1.example.com。在這方面,Internet Explorer不同於其他瀏覽器。
(來自Internet Explorer Cookie內部(FAQ))
這意味著,如果您省略了domain
屬性,那麼IE中的子域將是可見的。
是true
還是false
,表明Cookie傳輸是否需要安全協議(HTTPS)。
默認值:無安全協議要求。
示例:
Cookies . set ( 'name' , 'value' , { secure : true } )
Cookies . get ( 'name' ) // => 'value'
Cookies . remove ( 'name' )
一個String
,可以控制瀏覽器是否正在發送cookie以及跨站點請求。
默認值:未設置。
請注意,最近的瀏覽器即使沒有在此處指定任何內容,也可以使默認值“ lax”。
示例:
Cookies . set ( 'name' , 'value' , { sameSite : 'strict' } )
Cookies . get ( 'name' ) // => 'value'
Cookies . remove ( 'name' )
const api = Cookies . withAttributes ( { path : '/' , domain : '.example.com' } )
創建一個覆蓋默認解碼實現的API的新實例。所有獲得依賴適當解碼工作的方法,例如Cookies.get()
和Cookies.get('name')
,將為每個cookie運行給定的轉換器。返回的值將用作cookie值。
示例從讀取只能使用escape
功能解碼的cookie:
document . cookie = 'escaped=%u5317'
document . cookie = 'default=%E5%8C%97'
var cookies = Cookies . withConverter ( {
read : function ( value , name ) {
if ( name === 'escaped' ) {
return unescape ( value )
}
// Fall back to default for all other cookies
return Cookies . converter . read ( value , name )
}
} )
cookies . get ( 'escaped' ) // 北
cookies . get ( 'default' ) // 北
cookies . get ( ) // { escaped: '北', default: '北' }
創建一個API的新實例,該實例覆蓋默認編碼實現:
Cookies . withConverter ( {
write : function ( value , name ) {
return value . toUpperCase ( )
}
} )
npm i @types/js-cookie
查看服務器文檔
查看貢獻指南
應通過Release
github Action工作流進行發布,以便在NPMJS.COM上發布的軟件包具有包裝來源。
GitHub版本是作為草稿創建的,需要手動發布! (這是這樣,我們能夠在發布前製作合適的發行說明。)
非常感謝Browserstack免費提供無限制的瀏覽器測試。