セッションとは、ユーザーがWebサイトを閲覧する際に、Webサイトにアクセスしてからブラウザを閉じるまでにかかる時間、つまりWebサイトの閲覧に費やす時間を指します。上記の定義から、セッションは実際には特定の時間の概念であることがわかります。
一般的に、Webサイトのあるページ内の変数(サーバーサイド変数を指します。以下同じ)は、次のページでは使用できません。セッションで扱う方が簡単です。セッションに登録した変数をグローバル変数として利用できます。このようにして、ユーザー ID 認証、プログラム ステータスの記録、ページ間のパラメーター転送にセッションを使用できます。
PHP3バージョンではセッションはどのように実装されていますか?
PHP3 自体はセッション関数を実装していません。実装するには他のメソッドを使用するしかありません。最も有名なのは phplib です。 phplib の最も基本的な機能には、ユーザー認証、セッション管理、権限、データベースの抽象化が含まれます。次に、phplibを使用してセッションを実装する方法を説明します。
1. まずphplibをインストールします(win32の場合はwin2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21です)
まずphplibを解凍します。中にある「php」ディレクトリをApacheにコピーします。インストールディレクトリ。例: Apache は d:Apache ディレクトリにインストールされ、次に「php」ディレクトリを d:Apache にコピーし、phplib ディレクトリのページ ディレクトリ内のファイルとディレクトリ (ディレクトリ自体を除く) を d: Apachehtdocs の下。
phplib クラス ライブラリはシステムに従って初期化する必要があり、local.inc ファイルの変更が必要になる場合があります。このファイルにはいくつかの基本パラメータが含まれており、実際のマシンの状況に応じて変更できます。
d:Apachephpprepend.php ファイル内のプログラムを次のように変更します。
if (!isset($_PHPLIB) または !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/Apache/php/" //phplib 下の php ディレクトリへのパス
d:Apachephplocal.inc ファイルを変更します。
class
DB_Example extends DB_Sql {
var $Host = "localhost"; //mysql データベースのホスト名 var $Database = "test"; //データベース名 var $User = "root"; //データベース ユーザー名 var $Password = "1234567"; // データベースユーザーのパスワード
最後
に、phplib ディレクトリの下のスタッフ サブディレクトリにある create_database.mysql ファイルに基づいて初期テーブルが生成されます。
phplib を使用するすべてのページは、まず phplib の実行に必要なクラス ライブラリ ファイルを見つけることができる必要があるため、php.ini で auto_prepend 変数を設定してそれをサポートできます。phplib には prepend.php ファイルが含まれており、auto_prepend を「d: /」として指定します。 Apache/php/prepend.php" (引用符付き) を指定すると、各ページに phplib クラス ライブラリが自動的にインクルードされます。これらのファイルが見つかるように、phplib クラス ライブラリが配置されているディレクトリを include 変数に追加することもできます。 2. page_open() 関数を呼び出します
。phplib を使用するすべてのページで、最初に初期化のために page_open 関数を呼び出す必要があります。例:
<?php
page_open(array("sess" => "Test_Session"));
?>
配列変数 (sess) は、一部の状態保存オブジェクトの初期化に使用されます。ここで注意してください: これらの組み込み名は、local.inc で定義されている必要があります。
phplib は Cookie を使用して状態情報を保存するため、ページのコンテンツをブラウザに出力する前に page_open() 関数を呼び出す必要があります。 PHP スクリプトは、関連するステータス データをデータベースに書き戻す page_close() で終わる必要があります。そうしないと、変数が失われます。
3. 特定の用途。
変数を登録した後は、セッションが終了するまで後続のページでその変数を使用できます。メソッド:
<?php $sess->register( "varname");
ここでの varname は変数値ではなく、変数名を最初に指定してから値を割り当てることができることに注意してください。特定のページで変数の値を変更でき、後続のページで変数にアクセスすると、変更された値が取得されます。変数の型は多様で、文字列、数値、配列などがあります。例:
最初のページ:
<?php
page_open(array("sess" => "テスト_セッション"));
$sess->register( "welcome"); //変数 $welcome を登録します。$ を追加する必要はないことに注意してください。
$welcome="こんにちは、PHP の世界!";
…
ページ_クローズ();
?>
2ページ目:
<?php
page_open();//セッションを開始する
echo $welcome;//最初のページで定義された $welcome を表示します
page_close();//ステータス情報を保存
?>
変数を登録した後、ページが最終的に page_close() 関数を呼び出すと、各セッション変数がデータベースに書き戻されます。 page_close() 関数を呼び出すのを忘れた場合、変数はデータベースに書き戻されず、予期しない結果が生じる可能性があります。変数が使用され、不要になった場合は、次の関数を呼び出して変数を削除できます:
<?php
page_open(array("sess" => "テスト_セッション"));
…
$sess->unregister( "変数名");
…
ページ_クローズ();
?>
PHP4版でセッションを実装するにはどうすればよいですか?
PHP4 のセッションは、セッション ID を保存するために Cookie に依存し、変数を保存するためにファイル システムを使用します (デフォルトでは)。そのため、そのセッション変数はオブジェクトを保存できません。もちろん、セッションをデータベースに保存することもできます。
php4 にはセッションに関連する関数が多数あります (詳細については、php.ini 設定の記事を参照してください)。通常、呼び出す必要がある関数は session_start()、session_register()、session_is_registered() の 3 つだけです。
セッションを必要とする各ページの先頭で session_start() 関数を呼び出します。例:
<?session_start()?>
<html><本文>
<?
$welcome="ハローワールド!";
session_register("welcome");//$welcome 変数を登録します。$ 記号がないことに注意してください。 if(session_is_registered("welcome"))//$welcome 変数が登録されているかどうかを確認します。 echo "welcome 変数は登録されました!";
それ以外
echo "ウェルカム変数はまだ登録されていません!";
?>
</body></html>
php4 でセッション処理をカスタマイズするには、
次の6 つの関数を拡張する必要があります。
·sess_open($sess_path, $session_name);
この関数は、初期化のためにセッション ハンドラーによって呼び出されます。
パラメータ $sess_path は、php.ini ファイルの session.save_path オプションに対応します。パラメータ $session_name は、php.ini ファイルの session.name オプションに対応します。
·sess_close();
この関数は、ページの実行が終了し、セッション ハンドラーを閉じる必要があるときに呼び出されます。
·sess_read($key);
この関数は、セッション ハンドラーが指定されたセッション キー値 ($key) を読み取るときに、識別子を取得して返します。 ) $key のセッション データ (注: シリアル化とは、プログラムの終了時または必要なときに変数またはオブジェクトをファイルに保存し、プログラムの実行時または次回必要になったときにそれらをメモリに転送する技術です。データを保存するだけの方法とは異なります。)
·sess_write($key, $val);
この関数は、セッション ハンドラーがデータを保存する必要があるときに呼び出されます。これはプログラムの最後に発生することがよくあります。これは、sess_read($key) 関数を使用して次回取得できる場所にデータを保存する役割を果たします。
·sess_destroy($key);
この関数はセッションを破棄する必要があります。セッションを削除し、環境をクリアする責任があります。
·sess_gc($maxlifetime);
この関数はフラグメントのクリーンアップを担当します。この場合、古いセッション データを削除する必要があります。セッション ハンドラーはこれらを時々呼び出します。
カスタム プログラムは、特定の状況に応じて、mysql データベースまたは DBM ファイルを使用してセッション データを保存できます。サポートに mysql を使用する場合は、次の手順を実行する必要があります。
まず、mysql でセッション データベースを作成し、セッション テーブルを作成します。
mysql> CREATE DATABASE session;
mysql>GRANT 選択、挿入、更新、削除 ON セッション* TO phpsession@localhost
-> 'phpsession' によって識別されます;
mysql> CREATE TABLE セッション (
-> sesskey char(32) が null ではありません。
-> expiry int(11) unsigned not null、
-> 値のテキストが null ではない、
-> 主キー (sesskey)
-> );
次に、マシン上のデータベース設定と一致するように session_mysql.php ファイル内の $SESS_DB* 変数を変更します
。
$SESS_DBHOST = "localhost" /* データベースのホスト名*/
$SESS_DBNAME = "セッション" /* データベース名*/
$SESS_DBUSER = "phpsession" /* データベースのユーザー名*/
$SESS_DBPASS = "phpsession" /* データベースのパスワード*/
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime")
……//カスタマイズされた関数
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
dbm ファイルを使用する場合のインターフェイスをカスタマイズします:
<?
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime")
……//カスタマイズされた関数
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
セッションのカスタマイズされたテスト コード:
<?php
…
if ($handler == "dbm") include("session_dbm.php");//どのインターフェースを使用するか
elseif ($handler == "mysql") include("session_mysql.php");
それ以外の場合…
session_start();
session_register("カウント");
…
?>
認証にSessionを使用するにはどうすればよいですか?
セッションはユーザー認証に使用できます:
ユーザーが正当であるかどうかを確認します:
<?
セッション開始();
……//検証プロセス session_register("reguser");
?>
ユーザーが別のページにログインしていないか確認する
<?
セッション開始();
if(isset($reguser)&&$reguser!=""){// ログインしている場合は、echo "ユーザー様、ようこそ";
}else{//ログインしていない場合は、「まず登録してください!」をエコーします。
}
?>
ユーザーがログアウトします:
<?
session_destroy();
…
?>
複数のセッションを同時に実行するにはどうすればよいですか?
質問: 部署の購入、販売、在庫システムを作成していたとき、複数のユーザーが同時に PHP アプリケーションにアクセスできるようにする必要があることがわかりました。当初設計された静的で一意のセッション ID は、データの混乱を引き起こしました。このようにして、一意のセッション ID を動的に生成することが最優先事項になります。
解決策は簡単です。php ファイル名とタイムスタンプを一意のセッション ID として使用しました。これにより、プログラム内の各セッションが所定の位置に配置され、混乱がなくなりました。
同じ問題を抱えている友人が解決策を見つけられるように、以下に私のソースコードを公開します。
//変数を保存するために PHP セッションを開始します。
if (empty($mysessionname)) {
$micro = マイクロタイム();
$micro = str_replace(" ","",$micro); // 空白を削除します。
$micro = str_replace(".","",$micro) // ピリオドを削除します。
$mysessionname = "po_maint" 。
}
セッション名($myセッション名);
session_start();
プログラムに関する注意事項:
ページ間で一意のセッション名の変数を渡すには、mysessionname を使用します。この名前も使用する場合は、上記のプログラムに小さな変更を加える必要があります。 Mysessionname は、セッションの開始前にすでに存在しているため、セッションの内部変数名にすることはできません。複数のセッションが元の Cookie ファイルを確実に上書きするため、Mysessionname を Cookie モードで保存することはできません。非表示のフォームフィールドを使用して保存できます。そうすれば問題はありません。