2

私は PHP でのプログラミングを学び始めたばかりで、セッションと Cookie という少しややこしい領域に遭遇しました。

サーバー側とクライアント側のストレージの違いは理解していますが、それらがどのように区別され、それぞれがどのような状況に適しているのかわかりません。

また、Cookie を使用してセッション ID を保存できると言う人もいますが、これはどのように行われ、なぜこれが有利なのでしょうか?

フィードバックをお寄せいただきありがとうございます。

4

3 に答える 3

3

まず最初に、セッション Cookie は通常の Cookie とは異なるものであるという長年の神話 (または、少なくとも既存の神話だと思います) を打ち破りましょう。そうではない。セッション Cookie は単なる通常の Cookie です。通常、設定されている (または設定されていない) セッション Cookie のプロパティのみが異なります。しかし、仕組みはまったく同じです。

Cookie は、http 応答ヘッダーをブラウザーに送信することによって設定されます。

Set-Cookie: name=value[; possible expiration-date][; other possible properties]

通常、セッション Cookie と通常の Cookie の違いは、有効期限が設定されていない (または有効期限が過去の日付に設定されている) ことです。つまり、ブラウザを閉じた後、ブラウザは Cookie を破棄します。しかし、「通常の」クッキーでもこれを行うことができます。したがって、いわば「セッションクッキー」になります。

これで、邪魔になりません。上記のプロパティに加えて、Cookie が通常アプリケーションによって使用され、さらにセッション Cookie として機能するメカニズムは、Cookie の値が何らかの一意に識別可能な値のみを保持することです。おそらく、ハッシュmd5の可能性があります。sha1

ブラウザがサーバー上のリソースをリクエストするたびに、次のような http リクエスト ヘッダーとともにこの Cookie を送信します (有効期限が切れていない限り)。

Cookie: name=value

バックエンド (あなたの場合は PHP) のセッション メカニズムは、Cookie の一意の ID を、サーバーのファイル システム内のファイル、またはおそらくデータベース内のファイルに格納されているデータとリンクしました。このようにして、Cookie を受信するたびに、このデータを取得してリクエストにリンクすることができます。

これの利点は、機密情報を 1) ネット上を移動する必要がないことから隠すことができること、および 2) サーバーに保持することにより、ユーザーのブラウザーの Cookie キャッシュに終わらないことです。

したがって、基本的には、通常の Cookie (レイアウト設定、YouTube などの非永続的なプレイリストなどを考えてください) で機密性が低く、アプリケーションに不可欠ではない情報を送信し、セッションを使用して保存する必要があります。機密情報。

編集:
申し訳ありませんが、「または有効期限が過去の日付に設定されています」は無視してください。これにより、Cookie はブラウザーによって即座に無効化されるため、リクエストと共に送信されなくなります。

于 2011-04-10T01:03:18.547 に答える
1

セッションよりも Cookie を使用する利点は、Cookieが永続的であることです。

つまり、数週間後にユーザーがサイトにアクセスしたときには、セッションが期限切れになっている可能性が高くなります。ただし、スクリプトに対して一意に識別できる Cookie がある場合は、自動的にログインしてセッションを再確立できます。

...それぞれどのような状況に適していますか?

答えは次のようになります。

  • セッション データには、永続的である必要のない情報や、短期間だけ必要な情報を含める必要があります。たとえば、複数ページのフォームをユーザーに提示する場合、セッションを利用することは理にかなっています。
  • Cookie は、ユーザーだけでなく、ユーザーがログインしているブラウザーやデバイスも一意に識別する ID またはハッシュを保存するために使用する必要があります。Cookie データは制御不能であり、ユーザーが作成した HTTP リクエスト (または特定の状況下ではページ上のスクリプト) によってのみ操作/削除できることに注意してください。

また、Cookie を使用してセッション ID を保存できると言う人もいます...

それが意味することは、使用しているユーザー/ブラウザー/デバイスを識別する一意の値を Cookie に格納することだと思います。このようなものを実装すると、次のようになります。

  • ユーザーが通常どおりログインできるようにします。
  • 一意のハッシュ (SHA-1 が最適) を生成し、それを Cookie に保存します。また、そのユーザーにリンクされたデータベースにハッシュを保存します。
  • ...
  • ユーザーは、セッションの有効期限が切れた後に戻ってきて、ページにアクセスします。
  • スクリプトは Cookie を確認し、ハッシュが属するユーザーを検索します。
  • ユーザーがログインしています。
于 2011-04-10T00:15:36.387 に答える
0

Cookie とセッションの両方を使用して、ユーザーを追跡するためにユーザー固有の情報を保持します。多くの場合、どちらも使用できますが、いくつかの違いがあります。

Cookie は、ユーザーのマシンに保存されるテキスト ファイルです。ユーザーがあなたのサイトにアクセスするたびに、彼は自分が誰であるかを知らせる Cookie を渡します。これの利点は、情報が他の人のマシンに保持されるため、心配する必要がないことです。牛が帰ってくるまで放っておくこともできます。ユーザーが戻ってきたとき/戻った場合、彼は情報を持ってきます。欠点は、ユーザーが提供した Cookie を簡単に編集できるため、情報を制御できないことです。これにより、Cookie 内の情報は信頼できなくなり、ユーザーが情報を提供するたびに確認する必要があります。

セッションは、サーバーに情報を保持することを除いて、Cookie のようなものです。利点は、セッションを信頼して、データを入力したときとまったく同じように保持できることです。欠点は、その情報を保存する必要があることです。つまり、Web サーバーが情報でいっぱいにならないように、最終的には破棄する必要があります。それは決して使用されません。

ここで、少しトリッキーになります。セッションの仕組みは上で説明したとおりですが、実際の実装は PHP の設定によって異なります。セッション データは、個々のテキスト ファイルまたはサーバー上のデータベースに保存できます。また、どのセッションがどのユーザーに対応しているかを認識する方法も必要です。これを行う通常の (しかしそれだけではない) 方法は、Cookie を使用することです。実際のデータはサーバーに残り、一意のセッション ID にリンクされます。そのセッション ID 番号は Cookie に記録されてユーザーに渡されるため、後でユーザーが戻ってきたときにそのデータを調べることができます。

セッション関数を使用すると、上記のプロセスが PHP によって自動的に実行されます。手動で実装する必要はありません。何らかの理由でセッションの実装方法を変更する必要がある場合は、php.ini のセッション パラメータを変更することで変更できます。

于 2011-04-10T01:03:57.227 に答える