セッションの中国語訳は「会話」といい、本来の意味は始まりと終わりのある一連の動作・メッセージ、例えば電話をかけるとき、受話器をとってから電話をかけるまでの一連の過程を指します。電話を切るまでのダイヤル操作をセッションと呼ぶことができます。現在の社会におけるセッションの理解は非常に混乱しています。「ブラウザ セッション中、...」という言葉が見られることがありますが、ここでのセッションとは、ブラウザ ウィンドウが開いてから閉じるまでの期間を指す場合もあります。 「セッション中のユーザー(クライアント)」という文では、ユーザーの一連の行動(通常はログインから商品の購入、チェックアウトまでなど、特定の目的に関連した一連の行動)を指す場合があります。ただし、このようなオンライン ショッピング プロセスでは、接続のみを指す場合もあります。
ただし、セッションという言葉がネットワーク プロトコルに関連付けられている場合は、「接続」を意味することがよくあります。 「接続指向」とは、通信する前に通信チャネルを確立する必要があることを意味します。たとえば、相手が電話に応答するまで通信を開始できません。 " 「ステータス」とは、通信相手が一連のメッセージを関連付けることができるため、メッセージが相互に依存できることを意味します。たとえば、ウェイターは、再び来た古い顧客を認識し、その顧客が前回店に 1 ドルを借りていたことを思い出すことができます。 1 つのタイプの例は「TCP セッション」または「POP3 セッション」です。
この混乱は元に戻せないため、セッションを定義するための統一された標準を持つことは困難です。コンテキストから推測することでそれを理解できます。たとえば、電話をかけるとき、電話をかけた瞬間から電話を切る瞬間まで、電話は接続されたままになるため、この接続状態はセッションと呼ばれます。訪問者と Web サイト全体との間の対話中に常に存在する変数。クライアントが COOKIE をサポートしていない場合、データの正確性と安全性を確保するために、Web サイトを訪問する訪問者にセッション変数が割り当てられます。いわゆるセッション ID。クライアントの Cookie に保存されるか、URL を介して渡されます。
セッションの発明により、HTTP プロトコルの制限が解消されます。HTTP プロトコルはステートレス プロトコルとみなされ、ユーザーの閲覧ステータスを知ることができません。サーバーが応答を完了すると、サーバーはブラウザーとの接続を失います。これは、クライアントもサーバーも、サーバーに特定のファイルをダウンロードするよう要求するだけで十分です。サーバーはお互いの過去の行動を記録する必要があり、顧客と自動販売機または通常の(非会員制)ハイパーマーケットの関係と同様に、それぞれのリクエストは独立している
ため、セッション(Cookie)を介して行われます
。解決策として、ユーザーが Web サーバーに再度リクエストを行ったときに、確認のためにユーザーの関連情報を記録します。このエクスペリエンスにより、ユーザーは複数のページを切り替えるときに自分の情報を保存できます。次のページでは使用できません(form や URL も実装できますが、非常に不十分な方法です)。Session に登録された変数はグローバル変数として使用できます。
では、セッションは何に役立つのでしょうか?オンラインで買い物をするとき、誰もがショッピング カートを使用したことがあります。いつでも選択した商品をショッピング カートに追加し、最後にレジに行って会計を行うことができます。プロセス全体を通じて、ショッピング カートは選択した商品を一時的に保存する役割を果たします。これは、ユーザーの ID 認証やプログラムのステータスを追跡するために使用されます。記録、ページ間のパラメータの受け渡しなど。
Session の実装では COOKIE テクノロジーが使用され、Session_id (セッション番号) を含む COOKIE がクライアント側に保存され、Session_name などの他のセッション変数がサーバー側に保存されます。ユーザーがサーバーにリクエストを送信すると、Session_id もサーバーに送信され、Session_id を通じてサーバー側に保存されている変数を抽出することで、ユーザーが誰であるかを識別できます。同時に、セッションが時々失敗する理由を理解するのは難しくありません。
クライアントが COOKIE を無効にしている場合 (IE の「ツール」-「インターネット オプション」をクリックし、ポップアップ ダイアログ ボックスの「セキュリティ」-「レベルのカスタマイズ」をクリックし、「会話ごとの COOKIE を許可」を無効に設定)、Session_idは渡されず、この時点ではセッションは無効になります。ただし、php5 は Linux/Unix プラットフォーム上の Cookie ステータスを自動的にチェックできます。クライアントが無効になっている場合、システムは URL に Session_id を自動的に追加して渡します。 Windows ホストにはこの機能はありません。
セッションの共通関数と使用法
Session_start(): セッションを開始するか、既存のセッションを返します。
注: この関数にはパラメータがなく、戻り値は true です。 Cookie ベースのセッションを使用する場合、Session_start() を使用する前にブラウザに出力を含めることはできません。そうしないと、次のエラーが発生します。
警告: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されました (出力は / usr/local/apache/ で開始されました) htdocs/cga/member/1.php:2)...
php.ini で Session.auto_start=1 を開始できるため、Session を使用する前に毎回 Session_start() を呼び出す必要はありません。ただし、このオプションを有効にするにはいくつかの制限があります。Session.auto_start が実際に有効になっている場合は、セッション内でオブジェクトを再作成するためにセッションを開始する前にクラス定義をロードする必要があるため、オブジェクトをセッションに配置することはできません。
登録されたすべての変数は、リクエストの完了後にシリアル化されます。登録されているが定義されていない変数は、未定義としてマークされます。これらの変数は、ユーザーが後で定義しない限り、その後のアクセスでもセッション モジュールによって定義されません。
一部の種類のデータはシリアル化できないため、セッションに保存できません。循環参照を持つリソース変数またはオブジェクトを含めます (つまり、オブジェクトがそれ自体への参照を別のオブジェクトに渡します)。