ここでは、Zend Framework1 の Zend_Session_Namespace クラスを使用したセッション管理のサンプルプログラムを掲載しています。
スポンサーリンク
Zend_Session_Namespace クラスを使用したセッション管理
セッション管理のサンプルスクリプトは次の通りです。詳細はサンプル内のコメントを参照ください。
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
// セッションの保存先を設定する
$save_path = APPLICATION_PATH . "/../data/sessions";
Zend_Session::setOptions(array('save_path' => $save_path));
// ブラウザで保持するセッションクッキーの有効期間(秒)を設定する場合
Zend_Session::rememberUntil(400);
// セッション開始
$sess_ns = new Zend_Session_Namespace("Test_Session");
// 初回アクセス時は null となる(セッション切れの判定が可能)
var_dump($sess_ns->clientIp);
// セッションクッキーを確認する。初回アクセス時は empty array
// (初回アクセスまたはクッキーの有効期間切れの判定が可能)
$cookies = $this->getRequest()->getCookie();
var_dump($cookies);
// セッションの保持期限を40秒に設定する
$sess_ns->setExpirationSeconds(40);
// セッションに各種情報を設定・上書きする
$sess_ns->clientIp = getenv('REMOTE_ADDR'); // クライアントIP
$sess_ns->timestamp = time(); // 現在時間
$sess_ns->xxx = 'xxx'; // その他
// 以降、セッション内の情報は書込み禁止とする(Readonly)
$sess_ns->lock();
// 再度インスタンスを生成しても同一のセッションを参照する
$sess_ns = new Zend_Session_Namespace("Test_Session");
var_dump($sess_ns->clientIp);
}
}
動作確認結果
初回アクセス時
null
array
empty
string '127.0.0.1' (length=9)
40秒以内の再アクセス時(セッションの有効期間内)
string '127.0.0.1' (length=9)
array
'PHPSESSID' => string 'mvjh96jebu8uq176i0q5089a75' (length=26)
string '127.0.0.1' (length=9)
最終アクセスから40秒経過後のアクセス時(セッション切れ)
null
array
'PHPSESSID' => string 'mvjh96jebu8uq176i0q5089a75' (length=26)
string '127.0.0.1' (length=9)
ポイント
- Zend Framework のデフォルト動作では、セッション管理は Cookie のみを利用し URL 埋め込みのセッション管理はしません。セキュリティ上も、推奨されていません。
- 上記サンプルでは、セッションのロックを行った後、再度 Zend_Session_Namespace のインスタンス生成を行っています。もちろん上記ソースコードでは新たにインスタンスを生成する必要はありませんが、例えば、セッションの設定およびロックまでをプラグインで行い、その後のセッション値の読み込みをアクションコントローラで行うといった場合にも、最初にインスタンス化した Zend_Session_Namespace を使いまわす必要がないことを示しています。