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

PHPでのセッションの詳細説明

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

はじめに: これは、PHP のセッションを説明する詳細ページです。PHP に関連する知識、スキル、経験、およびいくつかの PHP ソース コードを紹介します。

class='pingjiaF' Frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324031'scroll='no'> 概要

セッションとは、ユーザーが特定のコンテンツを閲覧することを指します。ウェブサイトを開いたとき、そのウェブサイトにアクセスしてからブラウザを閉じるまでの時間が、ユーザーがウェブサイトの閲覧に費やす時間となります。上記の定義から、セッションは実際には特定の時間の概念であることがわかります。

一般的に、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) は、いくつかの状態保存オブジェクトを初期化するために使用されます。ここで注意すべき点: phplib 組み込み名 (sess) を使用する必要があります。これらの組み込み名はローカルで定義されています。 .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 変数が登録されました!
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 として識別されるセッション データを返します (注: シリアル化とは、プログラムの終了時または必要なときに変数またはオブジェクトをファイルに保存し、次のプログラムの実行時または必要なときにそれらをメモリに転送するテクノロジです。 . 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 セッション。
マシンのデータベース設定に一致する変数:


* データベースのホスト名*/
$SESS_DBNAME = "sessions"; /* データベース名*/
$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_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を使うには?

ユーザー認証に使用できるセッション:

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




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



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

}
}

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

session_destroy();

?>

達成方法 複数のセッションが同時に実行されていますか?

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

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

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


//変数を保存するために PHP セッションを開始します

$micro = microtime(); // ストリップ空白を削除します
$micro = str_replace(".","",$micro); // ピリオドを削除します
$mysessionname = "po_maint" .
session_name($mysessionname); ;


プログラムのメモ:

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


「PHPでのセッションの詳しい説明」の関連記事をもっと見る》

J2EEが大好きで、Java Michael Jackson Video Station JSONオンラインツールをフォローしてください

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