2012-02-21 11 views
1

皆様、Zend_Session in bootstrap

私はセッションでの最後の訪問のタイムスタンプを保存しようとしています。

私はこれを私のブートストラップで選択しました。

bootstrap.phpの:

<?php 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    /** 
    * Bootstrap::_initSaveLastVisitTimestamp() 
    * 
    * @return void 
    */ 
    public function _initSaveLastVisitTimestamp() 
    { 
     Zend_Session::start(); 
     $session = new Zend_Session_Namespace(); 
     $session->last_visit = time(); 
    } 
} 

のapplication.ini:

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application_" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 

resources.view.contentType = "text/html; charset=UTF-8" 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" 
resources.view[] = 

resources.db.adapter = "PDO_MYSQL" 
resources.db.params.dbname = "user_admin" 
resources.db.params.username = "user_admin" 
resources.db.params.password = "password" 

resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable" 
resources.session.saveHandler.options.name = "session" 
resources.session.saveHandler.options.primary.0 = "session_id" 
resources.session.saveHandler.options.primary.1 = "save_path" 
resources.session.saveHandler.options.primary.2 = "name" 
resources.session.saveHandler.options.primaryAssignment.0 = "sessionId" 
resources.session.saveHandler.options.primaryAssignment.1 = "sessionSavePath" 
resources.session.saveHandler.options.primaryAssignment.2 = "sessionName" 
resources.session.saveHandler.options.modifiedColumn = "modified" 
resources.session.saveHandler.options.dataColumn = "session_data" 
resources.session.saveHandler.options.lifetimeColumn = "lifetime" 
[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

は、残念ながら、これは動作していないが、私は私のIndexControllerにコード

<?php 
Zend_Session::start(); 
$session = new Zend_Session_Namespace(); 
$session->last_visit = time(); 

のこの部分を移動すると、 .phpその後、それは動作します..

私はほぼを試しましたが、私はまだそれを動作させることはできません。

誰もが任意のアイデアを持って?あなたは、ブートストラップファイルでセッションを設定する必要が

+0

を私はAFTERすべての_initメソッドが呼び出されたまでにZend_Sessionが完全に初期化されるとは思いません。 –

+0

おかげさまでは、_initメソッドが呼び出された後、何かintにブートストラップするオプションがありますか? –

+0

あなたの 'initSaveLastVisitTimestamp'で' $ this - > _ initSession() 'を最初に呼び出す必要があります。これにより、処理の前にセッションの初期化の依存性が確実に満たされます。 – prodigitalson

答えて

3

dbベースのセッションハンドラを使用しているので、セッションを使用する前に、DBをブートストラップする必要があることは妥当と思われます。

ので、これを試してみてください。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    /** 
    * Bootstrap::_initSaveLastVisitTimestamp() 
    * 
    * @return void 
    */ 
    public function _initSaveLastVisitTimestamp() 
    { 
     // Ensure that both the session and the db resources are bootstrapped 
     // before executing this 
     $this->bootstrap(array('db', 'session')); 

     // Actually start the session 
     Zend_Session::start(); 

     // same as before 
     $session = new Zend_Session_Namespace(); 
     $session->last_visit = time(); 
    } 
} 
+0

これは私の問題を解決しました、ありがとう! –

+0

@ E.Clark:喜んで助けました。中空のチェックマークをクリックして回答を受け入れてください。 [FAQ](http://stackoverflow.com/faq)を参照してください。 SOにようこそ。 ;-) –

0

bootstrap.phpの:

<?php 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    /** 
    * Bootstrap::_initSession() 
    * 
    * @return void 
    */ 
    public function _initSession() 
    { 
     Zend_Session::start(); 
     $session = new Zend_Session_Namespace('mySession'); 
    } 
} 

、あなたのコントローラであなたのセッション変数を取得し、最後の訪問のタイムスタンプセット:

IndexController.phpを

関連する問題