クッキー
クッキーとは、サーバーがHTTPレスポンスで送信する小さな情報であり、ブラウザは後続のリクエストでそれを送り返します。この技術は、認証(セッションを参照)、ショッピングカート、ユーザー設定、および「ログイン」している人を記憶する必要があるその他の多くの機能を作成できるように、状態を追加する多くのインタラクティブなWebサイトの基本的な構成要素です。
RemixのCookie
インターフェースは、クッキーのメタデータのための論理的で再利用可能なコンテナを提供します。
クッキーの使用
これらのクッキーを手動で作成することもできますが、セッションストレージを使用する方が一般的です。
Remixでは、通常、loader
やaction
関数(ミューテーションを参照)でクッキーを操作します。これらはデータの読み書きが必要な場所だからです。
例えば、あなたのeコマースサイトに、現在セール中の商品をチェックするようユーザーに促すバナーがあるとします。バナーはホームページの上部に表示され、ユーザーがバナーを閉じて少なくとも1週間は表示されないようにするためのボタンが側面にあります。
まず、クッキーを作成します。
次に、クッキーをimport
して、loader
やaction
で使用できます。この例では、loader
はユーザー設定の値を確認するだけで、コンポーネントでバナーを表示するかどうかを決定するために使用できます。ボタンがクリックされると、<form>
がサーバー上のaction
を呼び出し、バナーなしでページをリロードします。
注意: アプリに必要なすべてのクッキーを*.server.ts
ファイルで作成し、それらをルートモジュールにimport
することを(今のところ)推奨します。これにより、Remixコンパイラーは、ブラウザビルドで不要なこれらのインポートを正しく削除できます。最終的にはこの注意書きを削除したいと考えています。
Cookie の属性
Cookie には、有効期限、アクセス方法、送信先を制御するいくつかの属性があります。これらの属性は、createCookie(name, options)
で指定するか、Set-Cookie
ヘッダーが生成される際の serialize()
で指定できます。
これらの属性が何をするのかをより深く理解するために、これらの属性に関する詳細情報をお読みください。
クッキーの署名
クッキーに署名することで、受信時にその内容を自動的に検証することが可能です。HTTPヘッダーを偽造するのは比較的簡単なので、認証情報(セッションを参照)のように、誰かに偽造されたくない情報については、これは良い考えです。
クッキーに署名するには、最初にクッキーを作成するときに1つ以上のsecrets
を提供します。
1つ以上のsecrets
を持つクッキーは、クッキーの整合性を保証する方法で保存および検証されます。
secrets
配列の先頭に新しいシークレットを追加することで、シークレットをローテーションできます。古いシークレットで署名されたクッキーは、cookie.parse()
で正常にデコードされ、cookie.serialize()
で作成された送信クッキーの署名には常に最新のシークレット(配列の最初のもの)が使用されます。
createCookie
サーバーからブラウザのクッキーを管理するための論理的なコンテナを作成します。
各属性の詳細については、MDN Set-Cookie ドキュメントを参照してください。
isCookie
オブジェクトが Remix のクッキーコンテナである場合に true
を返します。
Cookie API
createCookie
から返されるクッキーコンテナには、いくつかのプロパティとメソッドがあります。
cookie.name
Cookie
および Set-Cookie
HTTP ヘッダーで使用されるクッキーの名前です。
cookie.parse()
指定された Cookie
ヘッダーから、このクッキーの値を抽出して返します。
cookie.serialize()
値をシリアライズし、このクッキーのオプションと組み合わせて、送信 Response
で使用するのに適した Set-Cookie
ヘッダーを作成します。
cookie.isSigned
クッキーが何らかの secrets
を使用している場合は true
、そうでない場合は false
になります。
cookie.expires
このクッキーが期限切れになる Date
です。クッキーに maxAge
と expires
の両方が設定されている場合、Max-Age
が Expires
より優先されるため、この値は現在の時刻に maxAge
の値を加算した日付になります。