Kohana 3.2在数据库中保存会话

时间:2012-02-23 03:10:53

标签: database session kohana

请帮助我理解,为什么会话没有写入数据库?

会话配置

'database'      => array(
    'name'      => 'session_database',
    'encrypted' => TRUE,
    'lifetime'  => 43200,
    'group'     => 'default',
    'table'     => 'sessions',
    'columns'   => array(
        'session_id'    => 'session_id',
        'last_active'   => 'last_active',
        'contents'      => 'contents'
    ),
    'gc' => 500,
),

我这样做:

Session::$default = 'database';    
$this->session = Session::instance();    
$this->session->set('test', 'test');

然后我重新加载页面,我在DB中的表sessions中看不到新行

4 个答案:

答案 0 :(得分:2)

如果您使用加密,则需要确保在encrypt.php配置文件中设置了加密密钥。

'database'      => array(
    'name'      => 'session_database',
    'encrypted' => TRUE,               /* using encryption requires a key */
)

/application/config/encrypt.php

<?php defined('SYSPATH') OR die('No direct script access.');

return array(

   'default' => array(
            /**
             * The following options must be set:
             *
             * string   key     secret passphrase
             * integer  mode    encryption mode, one of MCRYPT_MODE_*
             * integer  cipher  encryption cipher, one of the Mcrpyt cipher constants
             */
            'cipher' => MCRYPT_RIJNDAEL_128,
            'mode'   => MCRYPT_MODE_NOFB,
            'key'    => 'my_encryption_key'
   ),

); 

答案 1 :(得分:0)

我不知道你是否这样做了,但你需要使用这个确切的查询来创建表:

CREATE TABLE  `sessions` (
    `session_id` VARCHAR(24) NOT NULL,
    `last_active` INT UNSIGNED NOT NULL,
    `contents` TEXT NOT NULL,
    PRIMARY KEY (`session_id`),
    INDEX (`last_active`)
) ENGINE = MYISAM;

答案 2 :(得分:0)

也许您的设置Session::$default = 'database';会被Session::instance()覆盖。 试试这个:

$this->session = Session::instance('database');
$this->session->set('test', 'test');

答案 3 :(得分:0)

检查日志是否有错误。

我看到您已将会话数据设置为要加密。确保在加密配置文件中定义了“密钥”。您还可以尝试将数据库会话的加密设置设置为false,以查看是否导致错误。