セッションの中国語訳は「会話」といい、本来の意味は始まりと終わりのある一連の行為・メッセージを指します。例えば、電話をかけるとき、受話器を取るまでの一連のプロセスを指します。電話を切るまでの操作を「セッション」と呼びます。現在の社会におけるセッションの理解は非常に混乱しています。「ブラウザ セッション中、...」という言葉が時々見られますが、ここでのセッションはブラウザ ウィンドウが開いてから閉じるまでの期間を指します。 「セッション中のユーザー(クライアント)」という文に言及する場合、ユーザーの一連のアクション(通常は、ログインから商品の購入、チェックアウトまでなど、特定の目的に関連する一連のアクション)を指す場合があります。ただし、このようなオンライン ショッピング プロセスは、接続のみを指す場合があります。ただし、セッションという言葉がネットワーク プロトコルに関連付けられている場合、それは暗黙的に「接続指向」であることがよくあります。 「接続指向」とは、電話をかけるなど、通信する前に通信チャネルを確立する必要があり、相手が電話に出るまで通信を開始できないことを意味します。 「ステータスの維持」とは、通信相手が一連のメッセージを関連付けて、メッセージが相互に依存できるようにすることを意味します。たとえば、ウェイターは、再び来た古い顧客を認識し、その顧客が前回店に 1 ドル借りていたことを思い出すことができます。このカテゴリの例には、「TCP セッション」または「POP3 セッション」が含まれます。
この混乱は元に戻せないという事実を考慮すると、セッション関連の情報を読み取る際に統一した標準を設けることは困難です。文脈から推測して理解することはできませんが、次のように理解できます。たとえば、電話をかけるとき、電話をかけた瞬間から電話を切る瞬間まで、通話は接続されたままになります。つまり、この種の接続は次のようになります。通信のステータスはセッションと呼ばれ、クライアントが COOKIE をサポートしていない場合、データが正しく安全であることを保証するために常に存在します。セッション変数は、訪問者に割り当てられます。これは、クライアントの Cookie に保存されるか、URL を通じて渡されます。つまり、HTTP プロトコルです。はステートレス プロトコルとみなされ、ユーザーの閲覧ステータスを知ることができません。サーバー側で応答が完了すると、サーバーはブラウザとの接続を失います。これは、クライアントが行う必要があるだけです。クライアントとサーバーのどちらも、顧客と自動販売機または通常の (非会員) 間の関係と同様に、それぞれのリクエストは独立しています。したがって、ユーザーの関連情報はセッションを通じて記録され(Cookie は別の解決策です)、ユーザーはこの ID を再度 Web サーバーにリクエストするときに確認できるようになります。複数のページを切り替えるとき、Web サイトのプログラマーは皆、この経験を持っています。各ページの変数は次のページでは使用できません (フォームや URL も実装できますが、これらは非常に不十分な方法です)。変数はグローバル変数として使用できます。
それでは、セッションの用途は何でしょうか?オンラインで買い物をするとき、誰もがショッピング カートを使用したことがあります。いつでも選択した商品をショッピング カートに追加し、最後にレジに行って会計を行うことができます。プロセス全体を通じて、ショッピング カートは選択した商品を一時的に保存する役割を果たします。これは、ユーザーの ID 認証やプログラムのステータスを追跡するために使用されます。記録、ページ間のパラメータの受け渡しなど。
COOKIE テクノロジーは、Session の実装で使用されます。Session は、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 が実際に有効になっている場合、セッション内でオブジェクトを再作成するには、セッションを開始する前にクラス定義をロードする必要があるため、オブジェクトをセッションに配置することはできません。
登録されたすべての変数は、リクエストの完了後にシリアル化されます。登録されているが定義されていない変数は、未定義としてマークされます。これらの変数は、ユーザーが後で定義しない限り、その後のアクセスでもセッション モジュールによって定義されません。
一部の種類のデータはシリアル化できないため、セッションに保存できません。循環参照を持つリソース変数またはオブジェクトを含めます (つまり、あるオブジェクトがそれ自体への参照を別のオブジェクトに渡します)。