Простой, легкий API JavaScript для обработки печенья
Если вы просматриваете это по адресу https://github.com/js-cookie/js-cookie, вы читаете документацию для основного филиала. Просмотреть документацию для последнего выпуска. ??
JavaScript Cookie поддерживает NPM под названием js-cookie
.
npm i js-cookie
В пакете NPM есть поле module
указывающее на вариант модуля ES в библиотеке, в основном для обеспечения поддержки бундлеров, знающих модуль ES, тогда как его поле browser
указывает на модуль UMD для полной обратной совместимости.
Еще не все браузеры поддерживают модули ES . По этой причине пакет/релиз NPM предоставляет вариант модуля ES и UMD, и вы, возможно, захотите включить модуль ES вместе с запасным образом UMD, чтобы учесть это:
В качестве альтернативы, включайте JS-Cookie через JSDelivr CDN.
Импортировать библиотеку:
import Cookies from 'js-cookie'
// or
const Cookies = require ( 'js-cookie' )
Создайте cookie, действительный на всем сайте:
Cookies . set ( 'name' , 'value' )
Создайте cookie, который истекает через 7 дней, действителен во всем сайте:
Cookies . set ( 'name' , 'value' , { expires : 7 } )
Создайте истекающий файл cookie, действительный для пути текущей страницы:
Cookies . set ( 'name' , 'value' , { expires : 7 , path : '' } )
Читать cookie:
Cookies . get ( 'name' ) // => 'value'
Cookies . get ( 'nothing' ) // => undefined
Прочитайте все видимые файлы cookie:
Cookies . get ( ) // => { name: 'value' }
Примечание. Невозможно прочитать конкретный файл cookie, передав один из атрибутов cookie (которые могли или не могли использоваться при написании рассматриваемого файла cookie):
Cookies . get ( 'foo' , { domain : 'sub.example.com' } ) // `domain` won't have any effect...!
Cookie с именем foo
будет доступно на .get()
если оно видно, откуда называется код; Атрибут домена и/или пути не окажет эффекта при чтении.
Удалить 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 или CommonJs. .noConflict
МЕТОД не требуется.
Этот проект соответствует RFC 6265. Все специальные персонажи, которые не допускаются в имени Cookie или Value Cookie, закодированы с каждым из них uTF-8 HEX, эквивалентным с использованием процентного кодирования. Единственный персонаж в имени cookie-name или cookie-value, который разрешен и все еще кодируется,-это процентный %
, он избегается, чтобы интерпретировать процент ввода как буквальный. Обратите внимание, что стратегия кодирования/декодирования по умолчанию предназначена для совместимости только между файлами cookie, которые читаются/написаны JS-Cookie. Чтобы переопределить стратегию кодирования/декодирования по умолчанию, вам необходимо использовать конвертер.
Примечание. Согласно RFC 6265, ваши файлы cookie могут быть удалены, если они слишком большие или слишком много файлов cookie в одном домене, подробнее здесь.
По умолчанию атрибута cookie могут быть установлены во всем мире, создав экземпляр API через withAttributes()
или индивидуально для каждого вызова в Cookies.set(...)
передавая простой объект в качестве последнего аргумента. Атрибуты для вызова переопределяют атрибуты по умолчанию.
Определите, когда файл cookie будет удален. Значение должно быть Number
, которое будет интерпретироваться как дни со времен создания или экземпляра Date
. Если опущено, печенье становится сессионным cookie.
Чтобы создать cookie, который истекает менее чем за день, вы можете проверить FAQ на вики.
По умолчанию: 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 Document.COKIE не вернет cookie, если он будет установлен с атрибутом PATH, содержащим имя файла.
(Из интернет -проводника Cookie Internals (FAQ))
Это означает, что нельзя установить путь, используя window.location.pathname
в случае, если такое имя содержит имя файла, подобное SO: /check.html
(или, по крайней мере, такие cookie нельзя прочитать правильно).
На самом деле, вы никогда не должны разрешать ненадежный ввод устанавливать атрибуты cookie или вы можете подвергаться воздействию атаки XSS.
String
указывающая на действительный домен, в котором должны быть видны файлы cookie. Cookie также будет видна всем субдоменам.
По умолчанию: cookie виден только в домене или субдомене страницы, где был создан файл cookie, за исключением интернет -исследователя (см. Ниже).
Примеры:
Предполагая cookie, который создается на site.com
:
Cookies . set ( 'name' , 'value' , { domain : 'subdomain.site.com' } )
Cookies . get ( 'name' ) // => undefined (need to read at 'subdomain.site.com')
Примечание относительно поведения по умолчанию Internet Explorer:
Q3: Если я не укажу атрибут домена (для) cookie, т.е. в любом случае отправляет его во все вложенные субдомены? A: Да, cookie, установленные на example.com, будут отправлены на sub2.sub1.example.com. Internet Explorer отличается от других браузеров в этом отношении.
(Из интернет -проводника Cookie Internals (FAQ))
Это означает, что если вы опустите атрибут domain
, он будет виден для поддомена в т.е.
Либо true
, либо false
, указывая, требует ли трансмиссия cookie защищенного протокола (HTTP).
По умолчанию: нет требования о безопасном протоколе.
Примеры:
Cookies . set ( 'name' , 'value' , { secure : true } )
Cookies . get ( 'name' ) // => 'value'
Cookies . remove ( 'name' )
String
, позволяющая контролировать, отправляет ли браузер печенье вместе с перекрестными запросами.
По умолчанию: не установлен.
Обратите внимание, что более поздние браузеры делают «слабый» значение по умолчанию даже без указания здесь ничего.
Примеры:
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.
Пример из прочтения одного из файлов cookie, который можно декодировать только с помощью функции escape
:
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
процесса Actions Github GitHub, так что опубликованные пакеты на npmjs.com имеют провинцию пакета.
Выпуски GitHub создаются как черновик и должны публиковать вручную! (Это так мы можем создать подходящие заметки о выпуске перед публикацией.)
Большое спасибо Browesstack за предоставление неограниченного тестирования браузеров бесплатно.