RadPHP XEでZend_Sessionを使ってみる。

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');
  }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください