2015-04-22 74 views
0

設置爲數據庫時,我無法從Cake php會話中讀取值,它將返回null。Cake PHP 2.5.2。從數據庫讀取的會話

我在core.php中

Configure::write('Session', array(
    'defaults' => 'database' 
)); 

設置我已經建立了CakePHP的會話表,它在表中存儲會話數據。

我嘗試用

$pid = $this->Session->read('Projectid'); 

讀回我

$this->Session->write('Projectid', key($projects)); 

任何想法寫呢? 它在使用php會話而不是數據庫時有效。

數據庫的SQL

CREATE TABLE IF NOT EXISTS `cake_sessions` (
    `id` varchar(255) NOT NULL, 
    `data` text, 
    `expires` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

UPDATE

我發現,如果我刪除開單到會話一條線,它可以讀取其他variables.Is這一個錯誤?

$projects = $this->Project->find('list', array('fields' => array('id','name') 
$this->Session->write('Projects', $projects); //removing this line i can read 

回答

0

問題是我在表中使用日語,但它沒有設置爲UTF-8,這導致將會話保存到數據庫時出現問題。

0

使用CakePHP 2.3我正在試驗相同的問題,無法使用默認數據庫配置寫入或讀取Session。

然後,我跟着這個示例,Custom Handler CakePHP Session,但我沒有訪問服務器以正確配置php-apc,所以,只是我從示例中刪除了apc功能。

我在app/Model/Datasource/Session/CustomSessionHandler.php(示例中的ComboSession)中的最終代碼如下所示。

<?php 

App::uses('DatabaseSession', 'Model/Datasource/Session'); 

class CustomSessionHandler extends DatabaseSession implements  CakeSessionHandlerInterface { 
    public $cacheKey; 

    public function __construct() { 
     parent::__construct(); 
    } 

    // read data from the session. 
    public function read($id) { 
     $result = Cache::read($id); 
     if ($result) { 
      return $result; 
     } 
     return parent::read($id); 
    } 

    // write data into the session. 
    public function write($id, $data) { 
     Cache::write($id, $data); 
     return parent::write($id, $data); 
    } 

    // destroy a session. 
    public function destroy($id) { 
     Cache::delete($id); 
     return parent::destroy($id); 
    } 

    // removes expired sessions. 
    public function gc($expires = null) { 
     Cache::gc(); 
     return parent::gc($expires); 
    } 
} 

我的app/Config/core.php會話配置部分。

Configure::write('Session', array(
    'defaults' => 'database', 
    'handler' => array(
     'engine' => 'CustomSessionHandler', 
     'model' => 'Session' 
    ) 
)); 

最後我創建表來存儲會話。

CREATE TABLE `sessions` (
    `id` varchar(255) NOT NULL DEFAULT '', 
    `data` text, 
    `expires` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
); 

完成此步驟後,現在我可以讀取和寫入會話,沒有任何問題,我的會話存儲在'會話'表中。

+0

感謝您的回答,但我發現問題實際上是看到我的答案 – tsukimi