私は基本的にthis questionのポスターと同じ問題に遭遇しています。私のデータベースは正しく初期化されています。私はapplication.ini
とBootstrap
のデータベースとセッションSaveHandlerの初期化を試みました。どのようにしても同じ結果になります。Zend_Session_SaveHandler_DbTableはリフレッシュごとにセッションを消去していますか?
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "uname"
resources.db.params.password = "******"
resources.db.params.dbname = "dbname"
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "sessions"
resources.session.saveHandler.options.primary = "sessionID"
resources.session.saveHandler.options.modifiedColumn = "lastModifiedTime"
resources.session.saveHandler.options.dataColumn = "data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"
そして、ここのようなブートストラップ初期化が見えたものだ:
create table sesssions (
sessionID char(32) primary key not null,
lastModifiedTime timestamp,
lifetime timestamp,
data text
) engine=innodb;
を次のように私のセッションのデータベース・テーブルが定義されている
protected function _initSession() {
$db = Zend_Db::factory('Pdo_Mysql', array(
'host' =>'localhost',
'username' => 'uname',
'password' => '******',
'dbname' => 'dbname'
));
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$sessionConfig = array(
'name' => 'sessions',
'primary' => 'sessionID',
'modifiedColumn' => 'lastModifiedTime',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime'
);
$saveHandler = new Zend_Session_SaveHandler_DbTable($sessionConfig);
Zend_Session::setSaveHandler($saveHandler);
Zend_Session::start();
}
ここ
はapplication.ini
初期設定は次のようになります。
私はこれを非常に単純な方法でテストするテストアクションを持っていますその内容をSessionにダンプするフィールドフォーム。アクションは次のようになります。
public function addAction()
{
$namespace = new Zend_Session_Namespace();
$form = new Application_Form_AddToSession();
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
$namespace->content = $request->getParam('toAdd');
}
}
$this->view->form = $form;
}
は、ここでそれが使用する形式です:
class Application_Form_AddToSession extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$this->addElement('text', 'toAdd', array(
'filters' => array('StringTrim', 'StringToLower'),
'validators' => array(
array('StringLength', false, array(0, 256)),
),
'required' => true,
'label' => 'Add:',
));
$this->addElement('submit', 'add', array(
'required' => false,
'ignore' => true,
'label' => 'Add',
));
}
}
ビューだけでフォームを示しています。
値が実際にセッションに入ったかどうかをテストするために、私はインデックスアクションを使用します。これは問題のインデックスアクションです:
public function indexAction()
{
$namespace = new Zend_Session_Namespace();
echo 'Content: '.$namespace->content.'<br>';
echo '<pre>'; print_r($_SESSION); echo '</pre>';
}
Now。 Zend_Session_SaveHandler_DbTable
を使用するようにセッションの保存を設定していない場合、つまりセッションの保存がまったく設定されていない場合、正常に動作します。私はフォームフィールドに値を入力し、インデックスアクションに行き、それを私に送り返します。セッションは、想定されているとおりに動作します。
application.ini
またはブートストラップのいずれかにZend_Session_SaveHandler_DbTable
が設定されている場合、テストフィールドに値を入力してインデックスアクションに移動すると値がなくなります。データベーステーブルに適切なsessionID
の行があり、sessionID
がブラウザのクッキーと一致しています。しかし、データベースには他の情報はありません。 data
はNULLであり、TIMESTAMP
の両方のフィールドはゼロになります。
私は試してみることを使い果たしました。私は通常のテーブルとInnoDBテーブルとしてMysqlテーブルを持っています。私はdbを構成配列に渡し、ブートストラップにあるものとにあるものを初期化することを含め、データベースとセッション構成のすべての順列を試しました。私は手がかりを求めてWebとStackOverflowを精査しました。他の人が同様の問題について投稿しているのを見たことがありますが、私が見つけた回答はどれもうまくいきませんでした。私は何をしていないのですか?私は何をねじ込みましたか?どうすればそれを動作させることができますか?
美しい。私はそれがドキュメントにあったことを願っています... –
私はちょうどそれがINIの設定を持って、実際のinitメソッドでそれを使用するのは奇妙だと付け加えたいと思います。将来、奇妙な動作につながる可能性があります(実装方法を忘れたり、他の人がそれを使用することになります) –