HTTPのCookie&Session

3586 ワード

Cookie


-クッキーって何?
MDNは、HTTP Cookie(Web CookieまたはブラウザCookieとも呼ばれる)は、ブラウザからユーザブラウザに送信され、ブラウザに保存されるデータの1つであり、ブラウザが次の要求を開始するときにサーバに携帯され、送信される.
-クッキーの設定
  • サーバは、応答ヘッダにSet-Cookieの文字列を追加することによってcookieを作成し、そのフォーマットは以下の通りである(括弧の一部はオプション):
  • Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
    

    注意:value部分は通常name=value形式の文字列であり、これは記入する必要があります.
  • ブラウザが受信した応答メッセージでSet-Cookieというフィールドが含まれていることを見た後、このcookie値はその後の各要求でサーバに送信され、cookie値はCookieというHTTP要求ヘッダに格納され、cookieの値のみが含まれ、すべての設定オプションは無視される.例:
  • Cookie: value
    

    注意:ここではvalueだけがサーバに送信され、Set-cookieでのオプション設定オプションはブラウザ側でのみ使用され、サーバには返信されません.複数のvalueがある場合は、カンマで区切ることができます.たとえば、次のようにします.
    Cookie: value1; value2; name1=value1
    

    - expires
    expiresはCookieの有効期間を指定し、そのオプションの値はGMT日付フォーマットの値です.たとえば、次のようにします.
    Set-Cookie: name=chiang; expires=Tue, 20 Jun 2017 07:17:37 GMT
    

    expiresプロパティを設定していない場合、クッキーのライフサイクルは現在のセッションに限られ、ブラウザを閉じることは今回のセッションの終了を意味するため、セッションクッキーはブラウザの開いた状態の下にのみ存在します.expiresプロパティの値が過去の時間である場合、クッキーはブラウザによってすぐに削除されます.
    - domain
    クッキーがどのドメインに送信されるか、またはどのドメインに送信されるかを指定します.デフォルトでは、domainはクッキーのページがあるドメイン名を作成するように設定されます.dominプロパティは、クッキーがどのドメインまたはどのドメインに送信されるかを指定します.デフォルトでは、Cookieを作成するページのドメイン名です.domainプロパティは、クッキー送信可能ドメインの数を拡張することができ、例えば、
    Set-Cookie: name=chiang; domain=chiang.com
    

    ここではdomainをchiangに設定します.com、a.chiangからcom、b.chiang.comはリクエストを送信し、クッキーの値をこれらのすべてのサイトに送信することができます.ブラウザはdomainの値を要求されたドメイン名と末尾比較(すなわち文字列の末尾から比較)し、一致するクッキーをサーバに送信するからです.注意:domain値は、セキュリティ上の問題が発生するため、Set-Cookieメッセージヘッダを送信するホスト名の一部である必要があります.不正なdomain選択は直接無視されます.
    - path
    pathプロパティは、要求されたリソースURLに指定されたパスが存在する必要がある場合にCookieメッセージヘッダを送信することを指定します.デフォルトでは、現在Set-cookieリクエストが送信されているURLのpath部分です.
    Set-Cookie:name=chiang;path=/blog
    

    この例では、pathオプション値は/blog、/blogxxxなどと一致する./blogで始まるオプションはすべて合法です.注意:pathプロパティはdomainマッチングが完了した後にのみ比較されます.
    - source
    sourceプロパティはタグにすぎず、値はありません.SSLまたはHTTPSによってリクエストが作成された場合にのみ、secureオプションを含むクッキーがサーバに送信されます.
    Set-Cookie:name=chiang;path=/blog
    

    デフォルトでは、HTTPSリンクで転送されるクッキーにsecureオプションが自動的に追加されます.
    -クッキー自動削除
    クッキーがブラウザによって自動的に削除される場合:
  • セッションクッキーは、セッション終了時(ブラウザが閉じる)に
  • が削除される.
  • 永続化クッキー(Persistentクッキー)は、失効日に達すると
  • が削除される.
  • ブラウザ内のクッキーの数が制限されている場合、クッキーは新しいクッキーの作成スペースとして削除されます.

  • -HTTP-Only cookies
    HTTP-ONlyとは、ブラウザにこのクッキーがJavaScriptのdocument.cookie属性でアクセスできないことを伝えることを意味します.この属性はJavaScriptによって開始されたクロスサイトスクリプト攻撃(XSS)がクッキーを盗む行為を阻止するのを助けるためである.HTTP-ONlyクッキーを作成するには、クッキーにHTTP-ONlyタグを追加するだけです.
    Set-Cookie: name=chiang; HttpOnly
    

    Session


    -セッションとは?
    ウィキペディアのsessionについての説明:
    コンピュータ科学の分野、特にネットワークの分野では、セッション(session)は永続的なネットワークプロトコルであり、ユーザ(またはユーザエージェント)側とサーバ側との間に関連を作成し、パケットを交換する役割を果たすメカニズムであり、sessionはtelnetやFTPなどのネットワークプロトコルにおいて非常に重要な部分である.
    -クッキーによるセッション管理
    HTTPは無状態プロトコルであるため,登録認証に成功したユーザ状態がプロトコルレベルで保存できないなどの状態管理が実現できないと考えられる.ユーザが次にアクセスを続けると、他のユーザと区別できません.そこでCookieを用いてセッションを管理し,HTTPプロトコルに存在しない状態管理機能を補う.手順:
  • クライアントは、ユーザIDやパスワード等の登録情報を要求メッセージを介してサーバ
  • に送信する.
  • サーバは、要求を受けた後、当該ユーザにセッションID(例えばPHPSESSID=048 z 9 j…、このIDが盗用されないように推測しにくい文字列に設定し、安全を確保することが望ましい)をマークし、その認証状態を記録する.そして、このセッションIDを応答ヘッダのSet-cookieに書き込む.
  • クライアントは、サーバ側から送信されたセッションIDを受信するとCookieとしてローカルに保存する.次に同じ要求をサーバに送信すると、ブラウザは自動的にセッションID付きCookieを送信し、サーバ側は受信したセッションIDを検証することによってユーザとその認証状態を識別することができる.

  • 以上はログイン認証のsessionの例であり、この例によってsessionの基本原理を理解することができ、実際にはsessionはcookieに対するサーバのマッピングと理解することができる.