【Webベース】HTTP Cookie管理

3113 ワード

HTTP Cookie&Set-Cookie頭部
サーバがHTTP要求を受信すると、サーバは応答ヘッダにSet-Cookieオプションを追加することができる.ユーザエージェント(一般的にブラウザ)は、応答を受信すると通常Cookieを保存し、その後、そのサーバに対する要求ごとにCookie要求ヘッダを介してCookie情報をサーバに送信する.このメカニズムにより,サーバは無状態のHTTPプロトコルにおいて安定した状態情報を維持することができる.
サーバは、1つの応答で複数のSet-Cookieヘッダを設定することができ、これらのCookiesを追加、変更、削除するために使用され、複数のSet-Cookieヘッダドメインを1つにまとめることはできません.
Set-Cookieヘッダドメインの属性の大文字と小文字は敏感ではなく、認識できない属性は破棄されますが、他の属性の記憶には影響しません.
セッション期間Cookie&持続化Cookie
Set-Cookieの場合、ExpiresまたはMax-age命令を設定しない場合は、セッション期間cookieであることを示し、そうでない場合は永続化cookieである.セッション期間クッキーは、1つのセッションの終了時(すなわち、クライアントが閉じられたとき)に削除されます.しかし、多くのWebブラウザはセッションリカバリ機能をサポートしており、ブラウザにtabラベルをすべて保持させ、ブラウザを再開したときに復元することができます.同時に、クッキーもブラウザを閉じたことがないのと同じように回復します.
Expiresプロパティ
Expiresプロパティは、HTTP-date仕様に適合するタイムスタンプの形式でクッキーの最長有効時間を識別します.
Max-ageプロパティ
Max-ageプロパティは、クッキーが無効になる前に経過する秒数を識別します.秒数が0または-1の場合、クッキーは直接期限切れになります.Max-ageの優先度はExpires属性より高い.
Domainプロパティ
Domainプロパティは、クッキーが届くホスト名を指定します.定義されていない場合、デフォルトで現在のドキュメントの場所のパスのドメイン名セクションでは、ユーザーエージェントが格納するときにCookieのhost-only-flagがtrueとしてマークされ、現在のドメイン名とCookieのDomain属性が完全に等しい場合にのみ後続のプロセスに進むことができます.以前の仕様とは異なり、ドメイン名以前のポイント番号は無視されます.ドメイン名が指定されている場合、各サブドメイン名に相当します.ユーザーエージェントが格納すると、このCookieのhost-only-flagがfalseとマークされます.つまり、ドメインルール(domain-matches)に合致するドメイン名は後続のプロセスに入ることができます.特定のドメインのクッキーを設定し、元のサーバのドメイン名をカバーできない場合は、ユーザーエージェントによって拒否される必要があります.たとえば、サーバはfoo.example.comのリクエストに応答するときに、Domainプロパティをexample.comまたはfoo.example.comに設定できますが、bar.example.comまたはbaz.foo.example.comに設定できません.
Pathプロパティ
Pathプロパティは、Cookieヘッダを送信するために要求されるリソースのパスに表示されなければならないURLパスを指定します.定義されていない場合、デフォルトは現在のドキュメントの場所のディレクトリです.
Secure&HttpOnlyプロパティ
サーバは、SecureプロパティとHttpOnlyプロパティを使用して、追加のセキュリティ保護を提供できます.SecureとマークされたCookieは、HTTPSプロトコルによって暗号化された要求のみを介してサービス側に送信されるべきである.ドメイン間スクリプト(XSS)攻撃を回避するために、JavaScriptのDocument.cookie APIではHttpOnlyタグ付きCookieにアクセスできません.これらはサービス側にのみ送信されます.サービス側セッション情報を含むCookieがクライアントJavaScriptスクリプトに呼び出されたくない場合は、HttpOnlyタグを設定する必要があります.
注意:Cookieはportとschemaに対して隔離機構を提供しない.Cookieは、兄弟domainまたはサブdomainを検証せず、例えば、サーバがhttp://example.com/foo/barの要求に応答するときに、Pathが"/qux"のcookieを設定することができる.
Document.cookie Document.cookieは、現在のドキュメントに関連付けられたクッキーをウェブページで取得して設定することができる.
この場所からアクセス可能なすべてのHttpOnlyタグ以外のCookieを読み込む
allCookies = document.cookie;

上記のコードでは、allCookiesはすべてのCookieを含む文字列として割り当てられ、各cookieは「セミコロンとスペース(;)」で区切られ(すなわち、key=valueキー値ペア)、key=value以外の属性は含まれません.
新しいクッキーを書く
document.cookie = newCookie;

新Cookieはキー値ペア形式の文字列です.なお、この方法では一度に1つのクッキーのみを設定または更新できます.
クッキーの変更と削除
クッキーの条件の変更と削除
クッキーのName、Path、Domainは、クッキーを変更および削除するために一致する必要があります.変更すると、現在の後2つのクッキーが一致すると、前の設定のクッキーが削除され、後の設定のクッキーが追加されます.
クッキーを削除する方法
サーバは、有効期限のあるSet-Cookie応答ヘッダを設定することによって、cookieを削除することができる.ブラウザはまた、Document.cookieに期限切れのcookie文字列を割り当ててcookieを削除することもできます.このクッキーを削除するには、前にクッキーを作成したときと同じPathプロパティとDomainプロパティを指定します.
また、ユーザーエージェントは、ストレージの制限やプライバシーの考慮により、以前に保存されたcookiesを削除することもできます.
参照先:
Cookies
Set-Cookie
Deleting a Cookie in JavaScript
HTTP State Management Mechanism