RadPHP XEにはZend Frameworkが同封されています。
RadPHPからZend Frameworkの高度なセッション管理用コンポーネント Zend_Session を使用してみます。
必要なコンポーネントの読み込み
session_start()関数を使用した後に、Zend_Sessionを使うと例外Zend_Session_Exceptionが投げられます。
forms.inc.php内でApplicationクラスのインスタンスが生成されるときに、session_start()関数が使用されるので、use_unit(“forms.inc.php”); の行の前にZend_Session::start();を記述します。
<?php
require_once("rpcl/rpcl.inc.php");
//use_unit("forms.inc.php");の前に追加すること
use_unit("Zend/framework/library/Zend/Session.php");
Zend_Session::start();
//Includes
use_unit("forms.inc.php");
インスタンスの生成
Zend_Sessionを使用するには、Zend_Session_Namespaceのインスタンスを生成します。
引数には名前空間を指定します。
$defaultNamespace = new Zend_Session_Namespace('Default');
データの設定
$defaultNamespace->name = 'RadPHP XE';
$defaultNamespace->price = 3000;
データの取得
echo $defaultNamespace->name;
echo $defaultNamespace->price;
名前空間が異なると、同じ変数名を指定しても別々に管理されます。
$session1 = new Zend_Session_Namespace('session1');
$session1->name = 'RadPHP XE';
$session1->price = 3000;
$session2 = new Zend_Session_Namespace('session2');
$session2->name = 'C++Builder XE Professional バージョンアップ';
$session2->price = 52000;
echo '$session1->name = ', $session1->name; //=> RadPHP XE
echo '$session1->price = ', $session1->price; //=> 3000
echo '$session2->name = ', $session2->name; //=> C++Builder XE Professional バージョンアップ
echo '$session2->price = ', $session2->price; //=> 52000
サンプルプログラム
ボタンを押した回数をカウントする
function Button1Click($sender, $params)
{
$defaultNamespace = new Zend_Session_Namespace('default');
if (isset($defaultNamespace->numberOfClick)) {
$defaultNamespace->numberOfClick++;
} else {
$defaultNamespace->numberOfClick = 1;
}
echo "ボタンを押した回数: ", $defaultNamespace->numberOfClick;
}
有効期限を設定する
時間指定
$sesion = new Zend_Session_Namespace('default');
//10秒後に名前空間のすべてのデータを削除
$sesion->setExpirationSeconds(10);
//10秒後に変数numberOfClickを削除
$sesion->setExpirationSeconds(10, 'numberOfClick');
アクセス回数指定
//5回アクセスしたら削除
if (!isset($sesion->message)) {
$sesion->message = '5回アクセスしたら消えます';
$sesion->setExpirationHops(5, 'message');
}