HTTPのCookie&Session
3586 ワード
Cookie
-クッキーって何?
MDNは、HTTP Cookie(Web CookieまたはブラウザCookieとも呼ばれる)は、ブラウザからユーザブラウザに送信され、ブラウザに保存されるデータの1つであり、ブラウザが次の要求を開始するときにサーバに携帯され、送信される.
-クッキーの設定
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
注意:value部分は通常name=value形式の文字列であり、これは記入する必要があります.
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オプションが自動的に追加されます.
-クッキー自動削除
クッキーがブラウザによって自動的に削除される場合:
-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プロトコルに存在しない状態管理機能を補う.手順:
以上はログイン認証のsessionの例であり、この例によってsessionの基本原理を理解することができ、実際にはsessionはcookieに対するサーバのマッピングと理解することができる.