「GET、POST、キャッシュ、クッキー、セッションとは?」という人(自分)のためのメモ

表題の件、調べて理解できるものの、しばらくすると忘れてしまうのでメモとして残しておきます。 と言っても、他ブログからの引用(コピペ)オンリーです。 ブログ主様には感謝です。

キャッシュ、クッキー、セッション


Webブラウザ(パソコン)に保存されるもの

キャッシュ( Cache )⇒

何度も見るWebページがある場合に、2回目以降の閲覧時の表示スピードを上げるため、ページ内の画像やアイコンといったデータをパソコン内に保存する仕組み(またはその保存されたデータ自体)。

Webページまるごとの情報。

2回目以降はファイルのダウンロードをせずに、パソコン内にキャッシュ(貯蔵)されたデータでWebページを再現するため、表示スピードが早くなります。

クッキー( Cookie )⇒

Webブラウザ利用者の情報記録のこと。

記録される履歴情報は、ユーザーが入力したID、パスワード、そのWebページを訪れた日時、訪問回数など。

クッキーを使用しているサイトにアクセスすると、サイトの情報と一緒にクッキーファイルも利用者のパソコンにサイトから送信され、特定のフォルダに保存されます。

セッションクッキー( Session Cookie )⇒

Webブラウザのメモリーに保存されるもの。

Webブラウザを閉じれば破棄するようにできます。

履歴 ⇒

自分が閲覧したWebページのURL。

Webサーバーに保存されるもの

セッション( Session )⇒

パソコンに保存させておきたくない情報( Session )で、サーバーに保存されるもの。

Sessionの流れ

ユーザーが、Webページにアクセス( WebサーバーにHTTPリクエストを送る。)。

Webサーバーは、

『セッションID』と 『セッション・オブジェクト( セッションを管理するデータを書き込むためのもの )』 を作り、Webページの情報(データファイル)と共にセッションIDをユーザーに返す。( HTTPレスポンス )。

この時にセッションIDをユーザーに渡す方法は3つあります。

Cookieに書き込んで リンクのURLに埋め込む Webページのフォーム・データに埋め込む ⇩

パソコンにセッションIDという値が保存され、これを基に次からのアクセス( HTTPリクエスト )はサーバー側に保存された情報( セッション・オブジェクト )を参照したやりとりを可能にします。

・「セッション管理」のすべて-ステップ1 [基本のしくみ] Webブラウザに情報を預けて,アクセス時に送信させる:ITpro

HTTPの仕組みとセッション

HTTPはステートレスなプロトコル( 通信手順 )です。

・セッション管理の周辺知識まとめ | PAYFORWARD

・yohei-y:weblog:ステートレスとは何か

ステートレス( stateless )

サーバーはクライアントのセッション情報を保持しません。

◯ メリット

クライアントのリクエストは状態に依存せず、常にリソースに対する操作に必要十分な情報となります よってサーバーが増えてもそのままのリクエストでいつも同じリソースに対する操作ができます このためスケールアウトに向いています また処理がクライアントの状態に依らないので処理がシンプルになります

☓ デメリット

やり取りが冗長になりがちです またリソースへの操作が必要になる度にそのやり取りを繰り返す必要があります これによりネットワークの帯域を消費し、処理も遅くなります サーバーが状態を保持していないのでエラーが起きたときのハンドリングが複雑になりがちです

ステートフル( stateful )

サーバーはクライアントのセッション状態を保持しています。

◯ メリット

やり取りが完結に済みます それによりネットワークの帯域を節約できます

☓ デメリット

クライアントの状態を都度把握しておかなければいけないのでクライアントが増えると負荷も増えます サーバーを複数台設置する場合にはそれぞれのサーバー間でクライアントの状態を同期しなければいけません これらの理由によりスケールアウトには向いてません

参考文献: キャッシュ(Cache)とクッキー(Cookie)とセッション(Session)など ~愛しさと切なさと心強さと~とは全く関係ない - ts0818のブログ


GET、POST


GETもPOSTも、サーバへのリクエスト方法という共通点はありますが、、、

GETとは

URLにパラメータが付加される。
文字数制限がある。
パラメータつきのURLを保存・共有できる。
→これによりブックマークも共有できる

POSTとは

パラメータが見えづらい。
文字数制限がない

どう使い分ける???

GETは情報を取得するとき、POSTは情報を登録するときの利用が適しています
例:
GET→検索フォーム
POST→ログインフォーム

参考文献: GETとPOSTの使い分け方法 | PHP Junkie