1. セッションの概要
セッションとは何ですか? 素人の辞書では会議、会議期間と訳されています。不適切な比喩をしてみましょう
(不適切ではありますが、意味は同じです)、セッションとはあなたとWebサイトとの関係です。セッションは Web テクノロジーにおいて非常に重要な役割を果たします。 Webページはステートレス接続プログラムであるため、ユーザーの閲覧状況を知ることができません。したがって、ユーザーがこの機能で Web サーバーに再度リクエストを送信するときに確認できるように、セッションを通じてユーザーの関連情報を記録する必要があります。たとえば、一部の Web サイトではユーザーにログインを要求することがよくありますが、その方法は次のとおりです。ユーザーがログインしていることはわかりますか? セッションが存在しない場合、ログイン情報は保持されないため、すべての Web ページでユーザーにユーザー名とパスワードの入力を要求してはどうでしょうか。
もちろん、セッションはユーザー ID 認証に使用されるだけでなく、後で説明する他の側面にも使用される場合があります。セッションは中国語でセッション期間として説明されます。セッションは、ユーザーがサイトの URL を入力すると開始され、サイトを離れると終了します。セッションは、ダイナミック スクリプト言語のアクティブ サーバー ページで初めて登場しました。その機能は非常に強力なので、一言で説明することはできません。
PHP がまだバージョン 3.0 だったとき、セッションは永遠の苦痛でした。 PHP には、実行速度が速く、柔軟に使用でき、強力な機能があるという利点がありますが、多くの Web サイト開発者はセッションの問題を理由に PHP を放棄しました。少なくとも私の上司はそう考えています。当時、PHP3 でセッションを実装するためのソリューションを提供する PHP の無料関数ライブラリは数多くありましたが、どれも本物ではないと感じられました。何千円も出して買った携帯電話に、粗末な俵がついてくるようなものだが、機能は同じなのに、いつも違和感がある。 php4 の出現により、PHP はセッションの問題にカムバックするチャンスを与えられました。セッションの実装は (主に効率の問題により) 理想的ではありませんが、最終的には単独で実装され、実際に使用できます。 それで、セッションを何に使うのですか? 私がそれを使わなかったら、あなたは紙を売っていると疑われませんか?さて、セッションが何に使用されるかを見てみましょう。Web サイトで作業したことがある人なら誰でも、あるページの変数 (この章ではすべてサーバー側の変数を指します。以下同様) は次のページでは使用できません。これを実現するにはフォームや URL 文字列などのいくつかの方法がありますが、フォームが自動的に送信されたとしても、遅延はユーザーにとっては不便であり、どちらの方法も非常に困難です。プログラマーの負担が増える。大規模なプロジェクトを開発している場合、これらの追加の負担は無視できません。セッションを使用すると、セッションに登録した変数をグローバル変数として扱うことができます。すごいですね、グローバル変数?このようにして、その用途がわかります。最も重要なものは、ユーザー ID 認証、プログラム ステータスの記録、ページ間のパラメータ転送に使用されます。
その利点について長々と話してきたので、あなたはすでに誘惑に駆られていますが、まだ満足しないでください。欠点もあります。変数はファイルに保存されます (もちろん効率的ではありません。他の方法も使用できますが、しかし非常に面倒です)、オブジェクトを保存できません。対照的に、ASP のセッションはオブジェクト変数を保存し、メモリ変数を使用してセッション変数を保存できます。それでもなぜ PHP を選ぶのでしょうか? はは、この章を最初から読んでいただければ理解できると思いますが、まだ理解できない場合は、最初からやり直してください。あなたも php のエキスパートになれます^_^。
セッションはどのように実装されますか?はは、とても奥深いと思いますが、その秘密をお話しましょう。変数を保存するだけなら、これは非常に簡単であることは多くの読者に理解されると思いますが、前に述べたように、http プロトコルはステートレス接続であり、変数が誰に属しているのかをどのようにして知るのでしょうか? Cookie を使用して実現されます。セッション実装中。 Cookie はクライアント、つまりユーザーのマシン上に存在し、ユーザーのブラウザがサーバーに要求すると、セッション ID もサーバーに送信されます。自分が誰なのかを特定し、変数も特定できる。このようにして、セッションが時々失敗する理由を理解するのは難しくありません。信じられない場合は、次のことを試してください。 IE の「ツール」メニューに「インターネット オプション」メニューがあり、それを開いて、「セキュリティ」->「レベルのカスタマイズ」を選択し、「使用を許可」を変更します。セキュリティ設定の「各会話」で「Cookie」を無効に設定し、セッションが使用できるかどうかを確認してください。これで理解できました。ただし、php4 は Linux/Unix プラットフォームで Cookie のステータスを自動的にチェックし、Cookie が利用できない場合には、セッション ID が URL に自動的に付加されて渡されます。これがセッションの点で ASP よりも優れている唯一の点です。
2. php3 と 4 でのセッションの実装
php3 にはセッションのようなものはありませんが、それが必要です。心配しないでください。これを行ってくれる人はたくさんいます。最も有名なのは phplib です。海外でもダウンロードできますし、国内のほとんどのPHPサイトからダウンロードできます。最初にやらなければならないことは、phplib と php3 を一緒に動作させることです。この機能を実現するには、まず phplib をインストールする必要があります。フォローしてください、とても簡単です (次のメソッドは win2000+php3.0.16+apache1.3.12+phplib7.2c+mysql3.23.21 for win32 に渡されます) phplib の最も基本的な機能には、ユーザー認証、セッション管理、権限、データベースの抽象化が含まれます。
phplibを使用してセッション機能を実装するには? 1. まず、phplibを解凍します。このディレクトリをApacheのインストールディレクトリにコピーします。著者のマシンを例に挙げます。私の Apache は d:/apache ディレクトリにインストールされています。上記の「php」ディレクトリを d:a/pache にコピーし、phplib の下の Pages ディレクトリ内のファイルとディレクトリを d の下にコピーしました。 :/apache/htdocs、ディレクトリ自体を含めないように注意してください。 phplib クラス ライブラリは、システムに応じて初期化する必要があります。このファイルには、いくつかの基本パラメータが含まれています。マシンの実際の状況に応じて変更できます。 d:/apache/php/prepend.php3 ファイル内のプログラムを次のように変更します:
if (!isset($_phplib) または !is_array($_phplib)) {
$_phplib["libdir"] = "d :/apache/php/"; //ここを、phplib 配下の php ディレクトリを置いたパスに変更します
}
次に、d:/apache/php/local.inc ファイルを次のように変更します:
class db_example extends db_sql {
var $host = "localhost";//mysqlデータベースのホスト名
var $database = "test";//データベース名
var $user = "root";//データベースのユーザー名
var $password = " ";/ /データベース ユーザー パスワード
}
最後のステップは、解凍された phplib ディレクトリのスタッフ ディレクトリにある create_database.mysql ファイルを実行して、初期テーブルを生成することです。 phplib がどのように機能するかを説明しましょう。phplib を使用するすべてのページは、まず phplib を実行するために必要なクラス ライブラリ ファイルを見つける必要があります。これを指定すると、phplib 配布パッケージに prepend.php3 ファイルが含まれます。 auto_prepend の「d:/apache/php/prepend.php3」 (引用符付き) を使用すると、各ページに phplib クラス ライブラリが自動的にインクルードされます。phplib クラス ライブラリが配置されているディレクトリを include 変数に追加することもできます。もちろん、最も簡単な方法は phplib の絶対パスを指定することです。これは移植性が低すぎるため、良い考えではありません。
2 番目のステップでは、phplib を使用するすべてのページで、最初に初期化のために page_open 関数を呼び出す必要があります。これにより、現在または将来的に状態を保存する必要があることが phplib に伝えられます。典型的な
page_open の例は次のとおりです:
page_open(array("sess" => "example_session"));
配列変数 (sess) は、いくつかの状態保存オブジェクトを初期化するために使用されます。注: phplib 組み込み名 (sess) を使用する必要があります。これらの組み込み名は、ページのコンテンツがブラウザーに出力される前に、local.ini で定義されている必要があります。 php3 スクリプトは page_close() で終了する必要があります。これにより、関連するステータス データがデータベースに書き戻されます。忘れた場合でも、結果を考えることができるはずです。笑、すべての変数が失われています。私を責めないでください。 ...
phplib は状態情報を保存するために Cookie を使用するため、ページ コンテンツがブラウザーに出力される前に、page_open() 関数を呼び出す必要があります。 「おっと - ヘッダーが送信された後に setcookie が呼び出されました」というエラーを見つけます。これは、page_open() の前にブラウザに出力された内容を示します。一般的なエラーは < の間にあるため、空白行に特に注意する必要があります。 ;? と ? > タグの間に空白行が出力される これも非常にエラーが発生しやすい箇所です。エラーの可能性を減らすために、次のように初期化プログラムを作成できます:
page_open(array("sess" => "example_session")); ....