ホームページ >バックエンド開発 >PHPチュートリアル >【転送】PHPでのセッションの詳細説明

【転送】PHPでのセッションの詳細説明

WBOY
WBOYオリジナル
2016-06-23 14:31:51872ブラウズ

セッションとは、ユーザーがWebサイトを閲覧する際に、Webサイトに入ってからブラウザを閉じるまでにかかる時間、つまりユーザーがWebサイトの閲覧に費やす時間を指します。上記の定義から、セッションは実際には特定の時間の概念であることがわかります。

一般的に、Webサイトのあるページ内の変数(サーバーサイド変数を指します。以下同じ)は、次のページでは使用できません。セッションで扱うのが簡単です。セッションに登録した変数をグローバル変数として利用できます。このようにして、ユーザー ID 認証、プログラム ステータスの記録、ページ間のパラメーター転送にセッションを使用できます。

PHP3版でセッションを実装するにはどうすればいいですか?

PHP3自体はセッション関数を実装していません。最も有名なのはphplibです。 phplib の最も基本的な機能には、ユーザー認証、セッション管理、権限、データベースの抽象化が含まれます。次に、phplibを使用してセッションを実装する方法を説明します。

1.まずphplibをインストールします(環境はwin2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 for win32です)

まずphplibを解凍します、中に「php」ディレクトリがあるので、このディレクトリをコピーしてくださいApache インストール ディレクトリにコピーします。例: Apache は d:Apache ディレクトリにインストールされており、次に「php」ディレクトリを d:Apache にコピーし、phplib ディレクトリのページ ディレクトリ内のファイルとディレクトリ (ディレクトリ自体を除く) を d:Apachehtdocs にコピーします。

phplib クラス ライブラリは、システムに応じて初期化する必要がある場合があります。これには、マシンの実際の状況に応じて変更できる、いくつかの基本的なパラメーターが含まれています。

d:Apachephpprepend.php ファイル内のプログラムを次のように変更します。
if (!isset($_PHPLIB) or !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 ディレクトリに移動します。stuff サブディレクトリ内の 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 関数を呼び出す必要があります。例:
page_open(array("sess" => "Test_Session")) ;
?>

配列変数 (sess) は、一部の状態保存オブジェクトの初期化に使用されます。ここで注意してください: これらの組み込み名は、local.inc で定義されている必要があります。

phplibはCookieを使用して状態情報を保存するため、ページコンテンツをブラウザに出力する前にpage_open()関数を呼び出す必要があります。 PHP スクリプトは、関連するステータス データをデータベースに書き戻す page_close() で終わる必要があります。そうしないと、変数が失われます。

3. 具体的な用途。

変数を登録したら、セッションが終了するまで後続のページでその変数を使用できます。メソッド:

register( "varname"); ?>

ここでの varname は変数値ではなく、変数名を最初に指定してから値を割り当てることができることに注意してください。特定のページで変数の値を変更でき、後続のページで変数にアクセスすると、変更された値が取得されます。変数の型は多様で、文字列、数値、配列などがあります。例:

最初のページ:
page_open(array("sess" => "Test _Session"))
$sess->register( "welcome"); //変数$welcomeを登録します。 $
$welcome="Hello, PHP world!";
……
page_close() ?>

2ページ目:
page_open(); //セッション開始
echo $ welcome;//最初のページに定義されている$welcomeを表示
page_close();//ステータス情報を保存
?>

変数を登録した後、ページが最終的に page_close() 関数を呼び出すと、各セッション変数がデータベースに書き戻されます。 page_close() 関数を呼び出すのを忘れた場合、変数はデータベースに書き戻されず、予期しない結果が生じる可能性があります。変数が使用され、不要になったら、次の関数を呼び出して変数を削除できます。

page_open(array("sess" => "Test _Session"));
……
$sess- >unregister( "variable_name");
……
page_close();
?>

PHP4版ではセッションはどのように実装されているのでしょうか?

PHP4 のセッションもセッション ID を保存するために Cookie に依存し、変数を保存するためにファイル システムを使用します (デフォルト)。したがって、そのセッション変数はオブジェクトを保存できません。もちろん、セッションをデータベースに保存することもできます。

php4 にはセッションに関連する関数が多数あります (詳細については、php.ini の設定を参照してください)。通常、呼び出す必要がある関数は session_start()、session_register()、session_is_registered() の 3 つだけです。

セッションを必要とする各ページの先頭で session_start() 関数を呼び出します。例:



$welcome="hello world! ";
session_register("welcome");//$welcome変数を登録します、$記号がないことに注意してください
if(session_is_registered("welcome"))//$welcome変数が登録されているか確認します
echo "welcome変数には登録されました!";
else
echo "welcome変数が登録されていません!";
?>


php4でのセッション処理のカスタマイズ

6つの関数を拡張する必要があります:
_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 として識別されるセッション データを返します (注: シリアル化とは、プログラムの終了時または必要なときに変数またはオブジェクトをファイルに保存し、次のプログラムの実行時または必要なときにそれらをメモリに転送するテクノロジです。 . Data メソッドを保存するだけとは異なります。)

sess_write($key, $val);
この関数 data は、セッション ハンドラーがデータを保存する必要があるときに呼び出されます (プログラムの最後に発生することがよくあります)。これは、sess_read($key) 関数を使用して次回取得できる場所にデータを保存する役割を果たします。

sess_destroy($key);
この関数はセッションを破棄する必要がある場合に使用されます。セッションを削除し、環境をクリアする責任があります。

sess_gc($maxlifetime);
この関数はフラグメントのクリーンアップを担当します。この場合、古いセッション データを削除する必要があります。セッション ハンドラーはこれらを時々呼び出します。

カスタマイズされたプログラムは、特定の状況に応じて、mysql データベースまたは DBM ファイルを使用してセッション データを保存できます。サポートに mysql を使用する場合は、次の手順を実行する必要があります:

まず mysql でセッション データベースを作成し、セッション テーブルを作成します:

Mysql> CREATE DATABASE session;
mysql> GRANT select、insert、update、delete ON Meetings. -> value text not null,
-> PRIMARY KEY (sesskey)
->
次に、session_mysql.php ファイルの $SESS_DB* 変数をマシン上のデータベース設定に一致するように変更します。 ?
$SESS_DBHOST

......//カスタマイズされた関数

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");
else ……

session_start ( );
session_register("count");
...
?>

認証でSessionを使うには?

ユーザー認証にセッションを使用可能:

ユーザーが正当であるかどうかを確認:
session_start();
……//検証プロセス
session_register("reguser");

別のページでユーザーであるかどうかを確認ログインしています

session_start();
if(isset($reguser)&&$reguser!=""){// すでにログインしている場合
echo "ユーザー様、ようこそ"; //ログインしていない場合
echo "Please register first!";
?>

ユーザーはログアウトします:


……
?>

複数のセッションを実装する方法同時に実行していますか?

質問: 自分のユニットの購入、販売、在庫システムを作成していたとき、複数のユーザーが同時に php アプリケーションに入力できるようにする必要があることがわかりました。当初設計された静的で一意のセッション ID は、データの混乱を引き起こしました。このようにして、一意のセッション ID を動的に生成することが最優先事項になります。

解決策は簡単です。php ファイル名 + タイムスタンプを一意のセッション ID として使用しました。これにより、プログラム内の各セッションが所定の位置に配置され、混乱がなくなりました。

同じ問題を抱えている友人が解決策を見つけられるように、以下に私のソースコードを公開します。

//変数を保存するために PHP セッションを開始します
$micro = microtime()
$micro = str_replace(" ","",$micro); //空白
$micro = str_replace(".","",$micro); // ピリオドを削除します
$mysessionname = "po_maint" .
session_name($mysessionname);

プログラムのメモ:

ページ間で一意のセッション名の変数を渡すには、mysessionname を使用します。この名前も使用する場合は、上記のプログラムに小さな変更を加える必要があります。 Mysessionname は、セッションの開始前にすでに存在しているため、セッションの内部変数名にすることはできません。複数のセッションが元の Cookie ファイルを確実に上書きするため、Mysessionname を Cookie モードで保存することはできません。非表示のフォームフィールドを使用して保存できます。そうすれば問題はありません。

参考アドレス:http://www.newasp.net/tech/php/6538.html

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP の主流製品次の記事:PHP の主流製品