
RFC6265 Cookies と CookieJar for Node.js
var tough = require('tough-cookie'); var Cookie = tough.Cookie; var cookie = Cookie.parse(header); cookie.value = 'somethingdifferent'; header = cookie.toString();
var cookiejar = new tough.CookieJar(); cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); // ... cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { res.headers['cookie'] = cookies.join('; '); });
# Installation
とても簡単です!
`npm install tough-cookie`
なぜこの名前なのか? NPMモジュールの `cookie`、`cookies`、`cookiejar` はすでに使われていました。
## バージョンサポート
node.jsのバージョンサポートは、[request](https://www.npmjs.com/package/request) モジュールに準拠します。
# API
## tough
`require('tough-cookie')` から取得したモジュールの関数です。すべて純粋関数として使用でき、「バインド」する必要はありません。
**注**: 1.0.xより前のバージョンでは、これらの関数のいくつかは `strict` パラメータを受け付けていました。これは不要になったためAPIから削除されました。
### `parseDate(string)`
クッキーの日付文字列を `Date` にパースします。`Date.parse()` ではなく RFC6265 セクション5.1.1に従ってパースします。
### `formatDate(date)`
Date を RFC1123 文字列(RFC6265 推奨形式)にフォーマットします。
### `canonicalDomain(str)`
ドメイン名を正規ドメイン名に変換します。正規ドメイン名は、トリミング、小文字化、先頭ドットの除去、およびオプションでPunycodeエンコードされたドメイン名です(RFC6265 セクション5.1.2)。ほとんどの場合、この関数は冪等性があります(出力に対して再度実行しても悪影響はありません)。
### `domainMatch(str,domStr[,canonicalize=true])`
「この実際のドメインはクッキーのドメインと一致しますか?」という問いに答えます。`str` は「現在の」ドメイン名、`domStr` は「クッキー」ドメイン名です。RFC6265 セクション5.1.3に従ってマッチングしますが、「サフィックス一致」と考えるとわかりやすいです。
`canonicalize` パラメータは、他の2つのパラメータに対して `canonicalDomain` を適用するかどうかを指定します。
### `defaultPath(path)`
現在のリクエスト/レスポンスパスが与えられたとき、クッキーに保存するのに適切なPathを返します。これは基本的にパス中の「ファイル」の「ディレクトリ」ですが、RFCのセクション5.1.4で指定されています。
`path` パラメータは URI のパス名部分 _のみ_ でなければなりません(つまり、ホスト名、クエリ、フラグメントなどを除きます)。これは Node の `uri.parse()` 出力の `.pathname` プロパティです。
### `pathMatch(reqPath,cookiePath)`
「リクエストパスは指定されたクッキーパスとパスマッチしますか?」という問いにRFC6265 セクション5.1.4に従って答えます。真偽値を返します。
これは基本的に、`cookiePath` が `reqPath` のプレフィックスであるようなプレフィックス一致です。
### `parse(cookieString[, options])`
`Cookie.parse(cookieString[, options])` のエイリアス
### `fromJSON(string)`
`Cookie.fromJSON(string)` のエイリアス
### `getPublicSuffix(hostname)`
このホスト名のパブリックサフィックスを返します。パブリックサフィックスとは、クッキーを設定できる最短のドメイン名です。ホスト名にクッキーを設定できない場合は `null` を返します。
例: `www.example.com` と `www.subdomain.example.com` はどちらもパブリックサフィックス `example.com` を持ちます。
詳細については、http://publicsuffix.org/ を参照してください。このモジュールはそのサイトからリストを取得しています。この呼び出しは現在、[`psl`](https://www.npmjs.com/package/psl) の [get() メソッド](https://www.npmjs.com/package/psl#pslgetdomain) のラッパーです。
### `cookieCompare(a,b)`
`.sort()` で使用するために、クッキーのリストをRFC(セクション5.4 ステップ2)で推奨される順序に並べ替えます。ソートアルゴリズムは、優先順位は次のとおりです:
* 最も長い `.path`
* 最も古い `.creation`(精度は1ms、`Date`と同じ)
* 最小の `.creationIndex`(1msの精度を超えるため)``` javascript
var cookies = [ /* unsorted array of Cookie objects */ ];
cookies = cookies.sort(cookieCompare);
注記: JavaScriptの Date は1ms精度に制限されているため、同一ミリ秒内に複数のCookieが作成される可能性は十分にあります。これは特に .setCookie() で now オプションを使用する場合に当てはまります。.creationIndex プロパティはプロセス全体のグローバルカウンターで、new Cookie() による構築時に割り当てられます。これはRFCソートの精神を維持します: 古いCookieが先に来ます。この動作は MemoryCookieStore では有効に機能します(Set-Cookie ヘッダーが順番に解析されるため)が、分散システムではあまり適切でない可能性があります。高度な Store は、Cookie A と Cookie B が同じミリ秒で作成された場合でも、Cookie A が Cookie B より先に作成されていれば A.creationIndex < B.creationIndex となるように、別の 論理クロック を設定したい場合があります。グローバルカウンターを変更したい場合(おそらく すべきではありません が)、それは Cookie.cookiesCreated に保存されています。
permuteDomain(domain)domainMatch() がパラメータに一致する可能性のあるすべてのドメインのリストを生成します。Cookieストアの実装に便利です。
permutePath(path)pathMatch() がパラメータに一致する可能性のあるすべてのパスのリストを生成します。Cookieストアの実装に便利です。
tough.Cookie からエクスポートされます。
Cookie.parse(cookieString[, options])単一のCookieまたはSet-Cookie HTTPヘッダーを解析して Cookie オブジェクトに変換します。文字列を解析できない場合は undefined を返します。
optionsパラメーターは必須ではなく、現在は1つのプロパティのみを持ちます。
true の場合、=abc や = のようなキーなしCookieの解析を有効にします(これらはRFCに準拠していません)。optionsがオブジェクトでない場合は無視されるため、Array#map と併用できます。
以下は、NodeのHTTP/HTTPSレスポンスでSet-Cookieヘッダーを処理する方法です。``` javascript if (res.headers['set-cookie'] instanceof Array) cookies = res.headers['set-cookie'].map(Cookie.parse); else cookies = [Cookie.parse(res.headers['set-cookie'])];
_注:_ バージョン2.3.3では、tough-cookieは`=`の前のスペースの数を256文字に制限していました。この制限はその後削除されました。
詳細は[Issue 92](https://github.com/salesforce/tough-cookie/issues/92)を参照してください。
### プロパティ
Cookieオブジェクトのプロパティ:
* _key_ - 文字列 - クッキーの名前またはキー(デフォルト "")
* _value_ - 文字列 - クッキーの値(デフォルト "")
* _expires_ - `Date` - 設定されている場合、クッキーの `Expires=` 属性(デフォルトは文字列 `"Infinity"`)。`setExpires()` を参照してください。
* _maxAge_ - 秒 - 設定されている場合、クッキーの `Max-Age=` 属性(秒単位)。非期限切れの場合は `"Infinity"`、即時期限切れの場合は `"-Infinity"` という文字列も設定可能。`setMaxAge()` を参照してください。
* _domain_ - 文字列 - クッキーの `Domain=` 属性
* _path_ - 文字列 - クッキーの `Path=` 属性
* _secure_ - 真偽値 - `Secure` クッキーフラグ
* _httpOnly_ - 真偽値 - `HttpOnly` クッキーフラグ
* _extensions_ - `Array` - 認識されないクッキー属性(等号が内部にあっても文字列として)
* _creation_ - `Date` - このクッキーが構築された日時
* _creationIndex_ - 数値 - 構築時に設定され、より詳細なソート精度を提供するために使用されます(詳しい説明は `cookieCompare(a,b)` を参照してください)
クッキーが `CookieJar.setCookie()` を通過した後、以下の追加属性を持ちます:
* _hostOnly_ - 真偽値 - ホストオンリークッキーかどうか(つまり、Domainフィールドが設定されず、暗黙的に決定された場合)
* _pathIsDefault_ - 真偽値 - trueの場合、クッキーにPathフィールドがなく、`defaultPath()` を使って導出されたことを示します。
* _creation_ - `Date` - **変更**: 構築時から、クッキーが jar に追加された時点に変更されます。
* _lastAccessed_ - `Date` - 最後にクッキーにアクセスした時刻。実装されればクッキーのクリーンアップに影響します。`cookiejar.getCookies(...)` を使用するとこの属性が更新されます。
### `Cookie([{properties}])`
上記のCookieプロパティのいずれかを含むオプションオブジェクトを受け取り、指定されていないプロパティにはデフォルト値を使用します。
### `.toString()`
Set-Cookieヘッダー値にエンコードします。Expiresクッキーフィールドは `formatDate()` を使用して設定されますが、`.expires` が `Infinity` の場合は完全に省略されます。
### `.cookieString()`
Cookieヘッダー値(つまり `.key` と `.value` のプロパティを '=' で結合したもの)にエンコードします。
### `.setExpires(String)`
`parseDate()` に渡された日付文字列に基づいて有効期限を設定します。parseDate が `null` を返す場合(つまりこの日付文字列を解析できない場合)、`.expires` は `"Infinity"`(文字列)に設定されます。
### `.setMaxAge(number)`
maxAge を秒単位で設定します。`-Infinity` を `"-Infinity"` に、`Infinity` を `"Infinity"` に変換するので、JSON で正しくシリアライズされます。
### `.expiryTime([now=Date.now()])`
### `.expiryDate([now=Date.now()])`
expiryTime() は、このクッキーが期限切れになる絶対 Unix エポックミリ秒を計算します。expiryDate() も同様に動作しますが、`Date` オブジェクトを返します。どちらの場合も `now` パラメータはミリ秒単位であることに注意してください。
Max-Age は Expires よりも優先されます(RFC に従います)。`.creation` 属性、またはデフォルトでは `now` パラメータを使用して、`.maxAge` 属性をオフセットします。
Expires(`.expires`)が設定されている場合は、それが返されます。
それ以外の場合、`expiryTime()` は `Infinity` を返し、`expiryDate()` は "Tue, 19 Jan 2038 03:14:07 GMT"(32ビット `time_t` で表現可能な最新の日付;ほとんどのユーザーエージェントの一般的な上限)の `Date` オブジェクトを返します。
### `.TTL([now=Date.now()])`
`now`(ミリ秒)に対する TTL を計算します。`expiryTime`/`expiryDate` と同じ優先順位ルールが適用されます。
明示的な有効期限がないクッキーには数値 `Infinity` が返され、期限切れのクッキーには `0` が返されます。それ以外の場合は、ミリ秒単位の Time-To-Live が返されます。
### `.canonicalizedDomain()`
### `.cdomain()`
正規化された `.domain` フィールドを返します。これは小文字化され、ドメインに非ASCII文字が含まれる場合は punycode(RFC3490)でエンコードされます。
### `.toJSON()`
`JSON.serialize(cookie)` で使用するための利便性のため。JSON シリアライズ可能なプレーンな `Object` を返します。
`Date` プロパティ(つまり `.expires`、`.creation`、`.lastAccessed`)は ISO 形式(`.toISOString()`)でエクスポートされます。
**注**: カスタム `Cookie` プロパティは破棄されます。tough-cookie 1.x では、`.toJSON` メソッドが明示的に定義されていなかったため、すべての列挙可能なプロパティがキャプチャされていました。プロパティをシリアライズしたい場合は、そのプロパティ名を `Cookie.serializableProperties` 配列に追加してください。
### `Cookie.fromJSON(strOrObj)`
`cookie.toJSON()` の逆を行います。文字列が渡された場合は、最初に `JSON.parse()` します。
`Date` プロパティ(つまり `.expires`、`.creation`、`.lastAccessed`)は `Date.parse()` を介して解析されます。tough-cookie の `parseDate` ではありません。このレイヤーでは JavaScript/JSON 的なタイムスタンプが扱われるためです。
JSON 解析エラーの場合は `null` を返します。
### `.clone()`
このクッキーのディープクローンを行います。正確には `Cookie.fromJSON(cookie.toJSON())` として実装されています。
### `.validate()`
ステータス: *進行中*。いくつかのことは動作しますが、決して包括的ではありません。
クッキー属性の意味的正しさを検証します。生成した Set-Cookie ヘッダーの "lint" チェックに便利です。現在は真偽値を返しますが、将来的には理由文字列を返す可能性があります。以下の構造で将来対応できます:``` javascript
if (cookie.validate() === true) {
// it's tasty
} else {
// yuck!
}
tough.CookieJar を介してエクスポートされます。
CookieJar([store],[options])単に new CookieJar() を使用します。カスタムストアを使用したい場合は、それをコンストラクタに渡します。それ以外の場合は MemoryCookieStore が作成され使用されます。
options オブジェクトは省略可能で、以下のプロパティを持つことができます:
true - "com" や "co.uk" のようなドメインを持つクッキーを拒否します。false - bar や =bar(暗黙的に空の名前を持つ)のような不正な形式のクッキーを受け入れます。これは標準ではありませんが、ウェブ上で時々使用されており、(ほとんどの)ブラウザで受け入れられます。このモジュールは将来的にデータベース/リモートなどの CookieJar をサポートすることを目指しているため、CookieJar メソッドには継続渡しスタイルが使用されています。
.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))クッキージャーにクッキーを設定しようと試みます。操作が失敗した場合は、コールバック cb にエラーが渡され、成功した場合はクッキーがそのまま渡されます。クッキーは更新された .creation、.lastAccessed、.hostOnly プロパティを持ちます。
options オブジェクトは省略可能で、以下のプロパティを持つことができます:
true - これが HTTP か非 HTTP の API かを示します。HttpOnly クッキーに影響します。currentUrl が https: または wss: で始まる場合、デフォルトで true になります。それ以外は false です。new Date() - クッキーの作成/アクセス時間として使用する値。false - パースエラーや無効なドメインなどを静かに無視します。Store のエラーはこのオプションでは無視されません。RFC に従い、クッキー文字列に "Domain=" パラメータがなかった場合(または Cookie オブジェクトの .domain が null だった場合)、.hostOnly プロパティが設定されます。この場合、.domain プロパティは currentUrl の完全修飾ホスト名に設定されます。このクッキーをマッチングするには、正確なホスト名の一致が必要です(通常の domainMatch ではありません)。
.setCookieSync(cookieOrString, currentUrl, [{options}])setCookie の同期版。同期ストア(例:デフォルトの MemoryCookieStore)でのみ動作します。
.getCookies(currentUrl, [{options},] cb(err,cookies))現在の URL に対して Cookie ヘッダーで送信できるクッキーのリストを取得します。
エラーが発生した場合はコールバックに err として渡され、それ以外の場合は Cookie オブジェクトの Array が渡されます。配列は cookieCompare() でソートされます({sort:false} オプションが指定されていない場合)。
options オブジェクトは省略可能で、以下のプロパティを持つことができます:
true - これが HTTP か非 HTTP の API かを示します。HttpOnly クッキーに影響します。currentUrl が https: または wss: で始まる場合、デフォルトで true になります。それ以外は false です。new Date() - クッキーの作成/アクセス時間として使用する値。true - クッキーの有効期限チェックを実行し、期限切れのクッキーをストアから非同期に削除します。false を使用すると期限切れのクッキーを返し、ストアから削除しません(Set-Cookie ヘッダーの再生に役立つ可能性があります)。false - true の場合、クッキーをパスでスコープしません。デフォルトでは RFC 準拠のパススコーピングが使用されます。注意: 基盤となるストアでサポートされていない可能性があります(デフォルトの MemoryCookieStore はサポートしています)。返されるクッキーの .lastAccessed プロパティが更新されます。
.getCookiesSync(currentUrl, [{options}])getCookies の同期版。同期ストア(例:デフォルトの MemoryCookieStore)でのみ動作します。
.getCookieString(...).getCookies() と同じオプションを受け入れますが、配列ではなく Cookie ヘッダーに適した文字列をコールバックに渡します。Cookie 配列を .cookieString() でマッピングするだけです。
.getCookieStringSync(...)getCookieString の同期版。同期ストア(例:デフォルトの MemoryCookieStore)でのみ動作します。
.getSetCookieStrings(...)Set-Cookie ヘッダーに適した文字列の配列を返します。.getCookies() と同じオプションを受け入れます。クッキー配列を .toString() でマッピングするだけです。
.getSetCookieStringsSync(...)getSetCookieStrings の同期版。同期ストア(例:デフォルトの MemoryCookieStore)でのみ動作します。
.serialize(cb(err,serializedObject))基盤となるストアが .getAllCookies をサポートしている場合、Jar をシリアライズします。
注: カスタムの Cookie プロパティは破棄されます。プロパティをシリアライズしたい場合は、そのプロパティ名を Cookie.serializableProperties 配列に追加してください。
[Serialization Format] を参照してください。
.serializeSync().serialize の同期版。
.toJSON()JSON.stringify(cookiejar) の利便性のための .serializeSync() のエイリアス。
CookieJar.deserialize(serialized, [store], cb(err,object))新しい Jar が作成され、シリアライズされたクッキーが基盤となるストアに追加されます。各 Cookie はシリアライズに現れる順序で store.putCookie によって追加されます。
store 引数はオプションですが、Store のインスタンスであるべきです。デフォルトでは、新しい MemoryCookieStore のインスタンスが作成されます。
便利な点として、serialized が文字列の場合、最初に JSON.parse に通されます。それがエラーをスローした場合、そのエラーはコールバックに渡されます。
CookieJar.deserializeSync(serialized, [store]).deserialize の同期版。注: これが動作するには store が同期ストアでなければなりません。
CookieJar.fromJSON(string)Cookie.fromJSON() との一貫性を保つための .deserializeSync のエイリアス。
.clone([store,]cb(err,newJar))この jar のディープクローンを生成します。元の変更はクローンに影響せず、その逆も同様です。
store 引数はオプションですが、Store のインスタンスであるべきです。デフォルトでは、新しい MemoryCookieStore のインスタンスが作成されます。ストアタイプ間の転送は、ソースが .getAllCookies() を実装し、宛先が .putCookie() を実装している限りサポートされます。
.cloneSync([store]).clone の同期版で、新しい CookieJar インスタンスを返します。
store 引数はオプションですが、指定する場合は 同期 Store インスタンスでなければなりません。指定しない場合は、新しい MemoryCookieStore のインスタンスが使用されます。
ソース と 宛先 は両方とも同期 Store でなければなりません。一方または両方のストアが非同期の場合は、代わりに .clone を使用してください。MemoryCookieStore は同期 API と非同期 API の両方をサポートしていることに注意してください。
.removeAllCookies(cb(err))jar からすべてのクッキーを削除します。
これは tough-cookie バージョン 2.5 の新しい後方互換機能であり、すべての Store が効率的に実装しているわけではありません。removeAllCookies を実装していない Store の場合、フォールバックとして getAllCookies の後に removeCookie を呼び出します。getAllCookies が失敗するか Store に実装されていない場合、そのエラーが返されます。removeCookie の呼び出しの1つ以上が失敗した場合、最初のエラーのみが返されます。
.removeAllCookiesSync().removeAllCookies() の同期版。
CookieJar ストアの基底クラス。tough.Store として利用可能です。
各 CookieJar インスタンスのストレージモデルは、カスタム実装に置き換えることができます。デフォルトは MemoryCookieStore で、lib/memstore.js ファイルにあります。この API は非同期ストアを可能にするために継続渡しスタイルを使用しています。
ストアは基底の Store クラスを継承する必要があります。これは require('tough-cookie').Store として利用可能です。
ストアはデフォルトで非同期ですが、store.synchronous が true に設定されている場合、含まれている CookieJar の *Sync メソッドを使用できます(ただし、継続渡しスタイル
すべての domain パラメータは呼び出し前に正規化されています。
Cookie ストアは以下のすべてのメソッドを持たなければなりません。
store.findCookie(domain, path, key, cb(err,cookie))指定されたドメイン、パス、キー(名前)を持つクッキーを取得します。RFC では、これらのクッキーのうち正確に1つだけがストアに存在すべきとされています。ストアがバージョニングを使用している場合、最新/最新のクッキーが返されるべきです。
コールバックはエラーと結果の Cookie オブジェクトを受け取ります。クッキーが見つからない場合は、null を渡す必要があります(つまり、エラーではありません)。
store.findCookies(domain, path, cb(err,cookies))指定されたドメインとパスに一致するクッキーを見つけます。これは通常、上記の cookiejar.getCookies() のコンテキストで呼び出されます。
クッキーが見つからない場合、コールバックには空の配列が渡されなければなりません。
結果のリストは、RFC(ドメイン一致、パス一致、http-only フラグ、secure フラグ、有効期限など)に従って現在のリクエストへの適用可能性がチェックされるため、このメソッドを実装する際には楽観的な検索アルゴリズムを使用してもかまいません。ただし、使用する検索アルゴリズムは、行う必要のあるチェック量を制限するために、ドメインに domainMatch() し、パスに pathMatch() するクッキーを見つけようと試みるべきです。
バージョン 0.9.12 以降、上記の cookiejar.getCookies() の allPaths オプションにより、ここでのパスは null になります。パスが null の場合、パスマッチングは実行してはなりません(つまり、ドメインマッチングのみ)。
store.putCookie(cookie, cb(err))新しいクッキーをストアに追加します。実装は、同じ .domain、.path、.key プロパティを持つ既存のクッキーを置き換えるべきです。実装の性質によっては、fetchCookie と putCookie の呼び出しの間に重複した putCookie が発生する可能性があります。
cookie オブジェクトは変更してはなりません。呼び出し元はすでに .creation と .lastAccessed プロパティを更新しています。
クッキーを保存できない場合はエラーを渡します。
store.updateCookie(oldCookie, newCookie, cb(err))既存のクッキーを更新します。実装は、同じ domain、.path、.key を持つクッキーの .value を更新しなければなりません。実装は、ストア内の古い値が oldCookie と同等であることを確認するべきです。競合の解決方法はストアに任されています。
.lastAccessed プロパティは、2つのオブジェクト間で常に異なります(JavaScript のクロックで可能な精度まで)。.creation と .creationIndex は同一であることが保証されています。ストアは、クッキーの自動削除(例:最も最近使用されていないもの、これはストアが実装する)の選択に影響を与えるコストで、.lastAccessed の変更を無視したり延期したりしてもかまいません。
ストアは、新しいクッキーを保存する代わりに、ストア内のクッキーの .value を変更することを最適化したい場合があります。実装がこのメソッドを定義していない場合、putCookie(newCookie,cb) を呼び出すスタブがストアオブジェクトに追加されます。
newCookie と oldCookie オブジェクトは変更してはなりません。
newCookie が保存できない場合はエラーを渡します。
store.removeCookie(domain, path, key, cb(err))ストアからクッキーを削除します(一意性制約については findCookie の注釈を参照)。
クッキーが存在しない場合、実装はエラーを渡してはなりません。既存のクッキーの削除に失敗した場合のみエラーを渡します。
store.removeCookies(domain, path, cb(err))一致するクッキーをストアから削除します。path パラメータはオプションで、欠落している場合はドメイン内のすべてのパスを削除することを意味します。
既存のクッキーの削除に失敗した場合にのみエラーを渡します。
store.removeAllCookies(cb(err))オプション。ストアからすべてのクッキーを削除します。
1つ以上のクッキーが削除できない場合はエラーを渡します。
注: tough-cookie バージョン 2.5 の新メソッドであるため、すべての Store がこれを実装しているわけではなく、一部のストアはこれを実装しないことを選択する場合があります。
store.getAllCookies(cb(err, cookies))オプション。jar.serialize() 中にすべてのクッキーの Array を生成します。配列内のアイテムは、[Serialization Format] データ構造を持つ真の Cookie オブジェクトまたは汎用の Object のいずれかです。
クッキーは、compareCookies() によるソートを維持するために作成順に返されるべきです。参考までに、MemoryCookieStore は内部で真の Cookie オブジェクトを使用するため、.creationIndex でソートします。クッキーを作成順に返さない場合でも、作成時間でソートされますが、これは 1ms の精度しかありません。詳細については compareCookies を参照してください。
取得に失敗した場合はエラーを渡します。
注: 技術的な制限によりすべての Store がこれを実装できるわけではないため、オプションです。
Store を継承します。
デフォルトで使用されるインメモリの CookieJar 同期ストア実装です。同期実装にもかかわらず、CookieJar API の同期形式と非同期形式の両方で使用できます。シリアライズ、getAllCookies、removeAllCookies をサポートしています。
以下はコミュニティによって作成および保守されている Store 実装です。これらは公式ではなく、保証するものではありませんが、ご覧になると興味があるかもしれません:
db-cookie-store:SQL(SQLiteベースのデータベースを含む)file-cookie-store:ディスク上の Netscape クッキーファイル形式redis-cookie-store:Redistough-cookie-filestore:ディスク上の JSONtough-cookie-web-storage-store:DOM localStorage および sessionStorage注: カスタム Cookie プロパティをシリアライズしたい場合は、そのプロパティ名を Cookie.serializableProperties に追加してください。```js
{
// The version of tough-cookie that serialized this jar.
version: '[email protected]',
// add the store type, to make humans happy:
storeType: 'MemoryCookieStore',
// CookieJar configuration:
rejectPublicSuffixes: true,
// ... future items go here
// Gets filled from jar.store.getAllCookies():
cookies: [
{
key: 'string',
value: 'string',
// ...
/* other Cookie.serializableProperties go here */
}
]
}
# 著作権とライセンス
BSD-3-Clause:```text
Copyright (c) 2015, Salesforce.com, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of Salesforce.com nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.