Cookieとセッションとは何ですか?また、それらは互いにどのように関連していますか?


86

私はCookieとセッションを専門的に理解しようとしています。ブラウザがサーバーに接続すると、サーバーはブラウザに「phpsessid」を含むCookieをクライアントブラウザのCookieフォルダに「貼り付ける」ように「要求」することを知っています。

「phpsessid」ができたので、クライアントがサーバーに入ると、ブラウザはサーバーに「phpsessid」を送信し、サーバーはtmpフォルダーを調べ、一致するものがある場合は、ユーザーが持っているすべてのデータをロードします。このクライアントですが、私はプロセスに少し混乱しています。

セッションとCookieを作成するプロセス、つまり舞台裏で何が起こっているのかを理解するのを誰かが助けてくれれば幸いです。


あなたはすでに何が起こっているのか知っているようです。どの特定の部分について啓蒙したいですか?HTTP / cookieの部分、またはPHPがセッションストアをロードする方法は?
マリオ2012年

ブラウザがphpsessidで保存しているCookie、これはセッションとCookieを作成するためのクライアントを識別するためのphpsessidですか?
空白テキスト2012年

ブラウザが持っているCookieにはphpセッションIDが含まれており、サーバーに「このチャップを知っています」と伝え、サーバーはセッションデータを取得して(たとえば/ tmp /から)、ユーザーを復元します$ _SESSION
somedev

はい、私は知っていますが、この「phpsessid」はセッションとCookieを作成する前にクライアントを識別するために使用していますか、このphpsessidはCookieデータとクライアントコンピューター内、およびサーバーのtmpフォルダーのセッションファイル内に含まれていますか? ?
空白テキスト2012年

回答:


173

これを見てみましょう:

Cookieセッションはどちらも、ブラウザが行うさまざまなリクエスト間でアプリケーションの状態を保持する方法です。たとえば、 StackOverflowでページをリクエストするたびにログインする必要がないのは彼らのおかげです。

クッキー

Cookieは、キーと値のペアでデータを保持する小さなデータ(最大4KBの長さ)です。

name=value; name2=value2

これらは、JavaScriptによって、またはHTTPヘッダーを使用してサーバー経由で設定されます

Cookieには、HTTPヘッダーを使用した例のように、有効期限が設定されています。

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

これにより、ブラウザname2は値がvalue2で名前が付けられたCookieを設定し、約9年で期限切れになります。

ユーザーはコンテンツを簡単に操作できるため、Cookieは非常に安全でないと見なされます。そのため、常にCookieデータを検証する必要があります。クッキーから得られるものが必ずしもあなたが期待するものであると思い込まないでください。

Cookieは通常、ログイン状態を維持するために使用されます。この場合、ユーザー名と特別なハッシュがブラウザから送信され、サーバーはそれらをデータベースと照合してアクセスを承認します。

クッキーは、 セッションの作成ます

セッション

セッションは少し異なります。各ユーザーはセッションIDを取得します。これは、CookieまたはGET変数のいずれかによって検証するためにサーバーに返送されます。

通常、セッションは短命であるため、アプリケーション間の一時的な状態を保存するのに理想的です。ユーザーがブラウザを閉じると、セッションも期限切れになります。

変数自体がサーバーに保持されるため、セッションはCookieよりも安全であると見なされます。仕組みは次のとおりです。

  1. サーバーがセッションを開きます(HTTPヘッダーを介してCookieを設定します)
  2. サーバーはセッション変数を設定します。
  3. クライアント変更ページ
  4. クライアントは、手順1のセッションIDとともにすべてのCookieを送信します。
  5. サーバーはCookieからセッションIDを読み取ります。
  6. サーバーは、データベース(またはメモリなど)のリストからセッションIDを照合します。
  7. サーバーは一致するものを見つけ、$_SESSIONスーパーグローバルで利用できるようになった変数を読み取ります。

PHPが一致するものを見つけられない場合、新しいセッションを開始し、1から7までの手順を繰り返します。

機密情報はサーバーに保持されているため、セッションに保存できますが、ユーザーが安全でないWiFi経由でログインした場合など、セッションIDが盗まれる可能性があることに注意してください。(攻撃者はCookieを盗聴し、それを独自のものとして設定できます。変数自体は表示されませんが、サーバーは攻撃者をユーザーとして識別します)。


それがその要点です。両方の主題に関するPHPマニュアルで詳細を学ぶことができます。


1
つまり、セッションを機能させるにはCookieをオンにする必要があるということですか?
bigpotato 2013

1
@Edmund:ほとんどの場合、そうです。ただし、セッションIDがGET変数を介して送信されるように設定できます(つまり、session_idをすべてのページに追加する必要があります(hello.php?sid=cbe709ac7bed98f7ecb89713
マダラのゴースト

AndroidまたはiPhoneデバイスでブラウザを閉じるとはどういう意味ですか?アプリを停止しますか?デバイスの電源を切りますか?すべてのタブを閉じて終了しますか?など
Vandervals 2015年

2
@SurajJain「rememberme」Cookieがなければ、それはより長く持続します。
マダラの幽霊

4
他の質問:ユーザーがブラウザを閉じると、サーバーはこのイベントによってどのように通知され、サーバーはこのセッションIDを削除しますか?または、しばらくすると自動的に期限切れになりますか?
user27744 8020
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.