PHP完全チュートリアルページ1/2の初期化セッション中のエラー

WBOY
リリース: 2016-07-29 08:36:41
オリジナル
1084 人が閲覧しました
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")); ....

ステップ 3、具体的な使用法。
ユーザーが Web サイトにアクセスすると、ユーザーのセッションがすぐに開始されます。ユーザーのブラウザが Cookie をサポートしている場合、セッション ID が作成され、Cookie に配置されます。この一意の ID は php3 によってランダムに生成され、MD5 で暗号化されます。ランダムなシード文字列。この Cookie はセッションが終了するとユーザーのハード ドライブに書き込まれないため、セッション Cookie と呼ばれます。ユーザーのブラウザが Cookie をサポートしていない場合、セッション ID は URL チェーンに組み込まれ、暗号化されるため、盗むことはできません。セッション ID には、ユーザーが認証されているか、認証の有効期限、ユーザーの権限、および当社の便宜のために必要となるその他の情報などのユーザー関連情報が保存されます。セッションは実際にはユーザー セッションのプロセスです。セッションはユーザー登録を追跡するために使用されるだけでなく、保存したい情報をユーザーが後でアクセスするページに送信するために使用することもできます。もちろん、それらのページでは phplib が使用されていることが前提となります。方法は非常に簡単で、変数を登録した後は、セッションが終了するまで後続のページでその変数を使用できます。メソッド:
register( "variable_name");
ここでの variable_name は変数値ではなく、変数名を指定してから変数名を割り当てることができることに注意してください。価値。ページ内の変数の値を変更でき、後続のページは変数にアクセスするときに変更された値を取得します。変数の型は多様で、文字列、数値、配列などがあります。例:
最初のページ:
page_open(array("sess" => "example_session"));
$sess->register( "first");変数名の前に $
if (iset($firstname)) {
$first = $firstname;
....
page_close()>
2 ページ目:
page_open( );//セッションを開始します
echo $first;//効果を確認します
page_close();//ステータス情報を保存します
?> 変数を登録した後、ページが最終的に page_close() 関数を呼び出すと、各セッション変数はデータベースに書き戻されます。 page_close() 関数を呼び出すのを忘れた場合、変数はデータベースに書き戻されず、予期しない結果が発生します。変数が使用され、不要になった場合は、次の関数を呼び出して変数を削除できます。
page_open(array("sess" => "example_session")); $ sess->unregister( "variable_name");
...
page_close();
phplib 7.0 は、データベース、共有メモリ、または LDAP にセッション データを保存できるストレージ構造を使用します。 phplib はデータベース クラスを使用するため、ステータス情報を保存するために oracle8、mysql、postgresql などのデータベースを選択できます。
phplib の他の関数やセッションに関連する他の関数の使用については、そのマニュアルを参照するか、その Web サイトにアクセスしてオンライン ドキュメントを読むことができます。そのホームタウンは http://phplib.netuse.de/index.php3 です。 php4 のセッション実装のほとんどは phplib から学習されます。また、セッション ID を保存するために Cookie に依存し、変数を保存するためにファイル システムを使用します (デフォルト)。したがって、そのセッション変数はオブジェクトを保存できません (実際、オブジェクトの内容は保存できますが、ディスク上に保存されるため意味がありません。生きているオブジェクトではなく、せいぜいオブジェクトの死体であるためです)。この制限はそれほど大きなものではないため、ほとんどの場合、変数を保存するだけで済みます。もちろん、セッションをデータベースに保存することもできます。次のセクションでは、セッションをデータベースに保存する方法について説明します。 php4 は php3 よりも多くのセッションをサポートしているため、php.ini ファイルにはさらに多くのセッション設定オプションがあります。各項目の機能と意味を見てみましょう:
[session]
session.save_handler = files; データの保存/取得に使用されるハンドラー (セッション変数の保存に使用するもの。デフォルトではファイルが使用されます)
session.save_path = c: /temp; save_handler に渡される引数 (セッション変数が保存されるディレクトリ、linux/unix では /tmp、win ではディレクトリに設定)
; ファイルの場合、これはデータ ファイルが保存されるパスです。
session.use_cookies = 1 ; Cookie を使用するかどうか (もちろん、Win では選択の余地はありません)
session.name = phpsessid
;デフォルトのセッション、変更しないことをお勧めします)
; は Cookie 名として使用されます
session.auto_start = 0 ; リクエストの開始時にセッションを初期化します (セッションを自動的に有効にするかどうか、1 の場合は session_start( ) 各ページの関数)
session.cookie_lifetime = 0 ; Cookie の有効期間 (秒単位で Cookie が送信された後の保存時間を設定します。デフォルト値は 0 で、ブラウザが閉じるまでを意味します)。
; または 0 の場合、ブラウザが再起動されるまで
session.cookie_path = / ; Cookie が有効なパス (Cookie) (Cookie が有効なパス)
session.cookie_domain = ; Cookie が有効なドメイン)
session.serialize_handler = php ; データのシリアル化に使用されるハンドラー (定義 シリアル化されたデータの識別子。この関数は wddx モジュールまたは php によって内部的にのみ使用されます。デフォルト値は php)
; php は php の標準シリアライザーです
session.gc_probability = 1; (一時ファイルが処理を開始するたびに処理される確率を設定します (gc、ガベージ コレクション))。デフォルト値は 1 です。 .)
; セッションの初期化ごとに「ガベージ コレクション」プロセスが開始されます
session.gc_maxlifetime = 1440 ; この秒数が経過すると、セッションを保存している一時ファイルがクリアされるまでの秒数を設定します。 ; データは「ガベージ」として認識され、
; gc プロセスによってクリーンアップされます
session.referer_check = ; クライアントを参照しているセッション コードを削除する必要があるかどうかを確認します。セキュリティまたはその他の考慮事項のため、デフォルト値は 0 です。)
; ID を含む外部に保存された URL
session.entropy_length = 0; (セッションが高エントロピーのリソースから読み取るビット数を設定します)デフォルト値は 0 です。)
session.entropy_file = ; セッション ID を作成するためにここで指定します (作成するセッション コードを設定する場合は、/dev/random や / などの外部の高エントロピー リソースまたはファイルを使用して作成します) UNIX システムでは dev/urandom。)
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache ; (セッション バッファ制限を設定する)
; cache_expire = 180 ; ドキュメントは n 分後に期限切れになります (ドキュメントの有効期間、単位は分です)
Windows プラットフォームでは、php4.01pl2 より前のバージョンでは、 session.save_path の設定後にエラーが発生します。そしてその後修正されました。以前のバージョンを使用している場合は、session.save_path を「./」または「/temp」に設定し、php スクリプトを配置する現在のディスクのルート ディレクトリに temp という名前のディレクトリを作成できます (My php スクリプトが配置されています) d:apachehtdocs の下に、d: ドライブのルート ディレクトリに temp というディレクトリを作成します)。
php4 のセッション関連関数には主に以下が含まれます:
session_start: セッションを初期化し、セッションを使用して各ページの先頭で呼び出す必要があります。
session_destroy: セッションを終了する。セッションを終了する必要がある場合に呼び出されます。
session_name: 現在のセッション名にアクセスします。
session_module_name: 現在のセッション モジュールにアクセスします。
session_save_path: 現在のセッション パスにアクセスします。
session_id: 現在のセッション ID 番号にアクセスします。
session_register: 新しいセッション変数を登録します。
session_unregister: 登録されたセッション変数を削除します。
session_is_registered: セッション変数が登録されているかどうかを確認します。
session_decode: セッションデータのデコード。
session_encode: セッションデータの暗号化。
通常、呼び出す必要がある関数は 3 つだけです。
つまり、session_start()、session_register()、session_is_registered()です。
セッションを使用する必要がある各ページの先頭で session_start() 関数を呼び出します。


$var="hello";
session_register("var");//$ 記号がないことに注意してください
if(session_is_registered("var")/ /変数を確認します
echo "はは、登録されました!";
else
?>
php4
us では 6 つの関数を拡張する必要があります。もちろん、これらの関数はユーザーが呼び出す必要はなく、私たちにとっては透過的です。
これらの関数は次のとおりです:
sess_open($sess_path, $session_name);
この関数は、初期化作業のためにセッション ハンドラーによって呼び出されます。渡す必要がある 2 つのパラメーターは、php.ini ファイルの session.save_path オプションに対応する $sess_path と、php.ini ファイルの session.name オプションに対応する $session_name です。具体的にどのように機能するかについては、以下の例を参照してください。
sess_close();
この関数は、ページの実行が終了し、セッション ハンドラーを閉じる必要があるときに呼び出されます。 (セッションを終了するために使用される sess_destory と混同しないように注意してください)
sess_read($key); この関数は、セッション ハンドラーが指定されたセッション キー値 ($key) を読み取るときに使用されます。
この関数は、$key として識別されるセッション データを取得して返します (注: データをシリアル化および逆シリアル化する方法について心配する必要はありません。これが何を意味するか分からない場合でも、心配する必要はありません)。
訳者注: シリアル化とは、プログラムの終了時や必要なときに変数やオブジェクトをファイルに保存し、次回プログラムの実行時や必要になったときにメモリに転送する技術で、データを保存するだけの方法とは異なります。
sess_write($key, $val);
この関数は、セッション ハンドラーがデータを保存する必要があるときに呼び出されます (多くの場合、プログラムの最後に発生します)。これは、sess_read($key) 関数を使用して次回取得できる場所にデータを保存する役割を果たします。
sess_destroy($key);
この関数は、セッションを破棄する必要がある場合に使用されます。セッションを削除し、環境をクリアする責任があります。
sess_gc($maxlifetime);
この関数はフラグメントのクリーンアップを担当します。この場合、古いセッション データを削除する必要があります。セッション ハンドラーはこれらを時々呼び出します。
これで、私たちが提供する機能について明確なアイデアが得られました。
カスタマイズされたプログラムは、mysqlデータベースまたはdbmファイルを使用してセッションデータを保存できます。ニーズに応じて異なります。
サポートに mysql を使用することにした場合は、次のことを行う必要があります:
まず、mysql でセッション データベースを作成し、セッション テーブルを作成します。まず mysql クライアントを実行し、次のコマンドを実行します:
mysql> データベース セッションを作成します。* to phpsession@localhost
mysql>テーブルセッションの作成 (
-> sesskey char(32) not null,
-> expiry int(11) unsigned not null,
-> value text not null,
-> 主キー (sesskey)
-> ; );
次のステップでは、session_mysql.php ファイル内の $sess_db* 変数をマシン上のデータベース設定に合わせて変更します。

現在のページ 1/2 12次のページ

上記は、PHP の初期化セッション中のエラーに関する完全なチュートリアルの 1/2 ページを紹介しています。初期化中のエラーの内容も含めて、PHP チュートリアルに興味のある友人の参考になれば幸いです。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート