DB Tablo Oturumları saklanması (Zend_Session_SaveHandler_DbTable kullanarak) Çalışmıyor

4 Cevap php

Bu benim tablo:

CREATE TABLE `Sessions` (
`id` varchar(32) NOT NULL,
`modified` int(11) default NULL,
`lifetime` int(11) default NULL,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB

Bu benim bootstrap ise:

$sessionConfig = array( 
'name'           => 'Sessions',      //table name as per Zend_Db_Table 
'primary'        => 'id',   //the sessionID given by php 
'modifiedColumn' => 'modified',     //time the session should expire 
'dataColumn'     => 'data', //serialized data 
'lifetimeColumn' => 'lifetime'      //end of life for a specific record 
); 
$saveHandler = new Zend_Session_SaveHandler_DbTable($sessionConfig); 
//cookie persist for 30 days 
Zend_Session::rememberMe($seconds = (60 * 60 * 24 * 30)); 

//make the session persist for 30 days 
$saveHandler->setLifetime($seconds) 
    ->setOverrideLifetime(true); 
//similarly, 
//$saveHandler->setLifetime($seconds, true); 
Zend_Session::setSaveHandler($saveHandler); 
Zend_Session::start();

Ben giriş yaptığınızda, hiçbir şey Sessions tabloya yazılı alır ve ben çok sonraki sayfa gösterimi üzerinde açmış duyuyorum.

Herhangi bir fikir? Ben içeri muhtemelen benim giriş denetleyicisi şey eksik benim kullanıcıların sürekli yapman için çalışıyorum?

4 Cevap

Sen Zend_Db'nin için varsayılan ayar adaptörü, ya da 'db' olarak yapılandırma dizideki sizin adaptör ileterek ya DB kullanmak için Zend_Session söylüyorum önce DB işleyicisi başlatmak zorunda.

Ben sadece bu çalışma almak başardı:

Benim application.ini:

resources.db.isDefaultTableAdapter = true
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.dbname = "dbname"
resources.db.params.username = "username"
resources.db.params.password = "password"

Benim bootstrap.php:

protected function _initSession() {
    $resource = $this->getPluginResource('db');
    $dbAdapter = $db = $resource->getDbAdapter();
    Zend_Registry::set("db", $dbAdapter);
    Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);
    $config = array(
        'name' => 'session',
        'primary' => 'id',
        'modifiedColumn' => 'modified',
        'dataColumn' => 'data',
        'lifetimeColumn' => 'lifetime',
        'db' => $dbAdapter
    );

    Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
    Zend_Session::start();
}

Oturumları başladı çünkü ilk defa bir Zend_Session_Namespace nesnesi oluşturmak Bu işlev, bootstrap.php ilk fonksiyonu olarak yerleştirilmiştir. Bunu yaparsanız, _initSession () işlevi çağrıldığında gelmeden önce, bir standart dosya tabanlı oturumu başlamış olabilir.

Son olarak, session.sql:

DROP TABLE IF EXISTS `session`;


CREATE TABLE `session` (

  `id` char(32) NOT NULL DEFAULT '',

  `modified` int(11) DEFAULT NULL,

  `lifetime` int(11) DEFAULT NULL,

  `data` text,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Yerde ben tablo InnoDB olması gerektiğini okudum.

Belki ... sayfada şeyden önce Zend_Session::start(); koymak zorunda?

Oturum eylemcisi olarak Redis bir uygulama ile aynı problem vardı.

Benim için, benim bootstrap sınıf çalışmalarında ilk yöntem olarak yöntemi _initSession koyarak.

Birine yardımcı olacağını umuyoruz.