web-dev-qa-db-ja.com

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

クッキーとセッションを専門的に理解しようとしています。ブラウザがサーバーに接続すると、サーバーはブラウザに「ブラウザ」の「cookies」フォルダ内の「phpsessid」を使用して「ペースト」するようブラウザに「要求」することを知っています。

これで「phpsessid」が得られたので、クライアントがサーバーに入ると、ブラウザーはサーバーに「phpsessid」を送信し、サーバーはtmpフォルダーを確認し、一致する場合はユーザーが持っているすべてのデータを読み込みますこのクライアントですが、プロセスと混同されています。

セッションとCookieの作成プロセスを理解できる人がいるとありがたいです-舞台裏で何が起こっているのか。

56
Blanktext

これを見ていきましょう。

Cookiesおよびsessionsは、アプリケーションの状態を保持する両方の方法です。ブラウザが行うさまざまなリクエスト。たとえば、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という名前のCookieをvalue2の値で設定し、約9年で期限切れになります。

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

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

Cookieは、sessionsの作成でもよく使用されます。

セッション

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

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

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

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

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

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


それが要点です。両方のテーマについてのPHPマニュアルをご覧ください。

138
Madara Uchiha