【问题标题】:Kohana 3.2 save session in databaseKohana 3.2 在数据库中保存会话
【发布时间】:2012-02-23 03:10:53
【问题描述】:

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

会话配置

'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 中看不到新行

【问题讨论】:

  • 如果好奇:您为什么打算这样做?
  • 我要保留 $this->session->set('test', 'test');在数据库中
  • 没有错误,好的。但是会话不会保存在数据库中

标签: database session kohana


【解决方案1】:

如果您使用加密,那么您需要确保您已在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'
   ),

); 

【讨论】:

  • 这完全正确,对我帮助很大。谢谢你。 Kohana 的文档是不正确的 - 在没有检查的情况下,我盲目地将我的加密配置文件命名为 encryption.phpcopy the default config/encryption.php - kohanaframework.org/3.3/guide/kohana/security/encryption。很棒的框架,糟糕的文档。
【解决方案2】:

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

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;

【讨论】:

  • exsistCREATE TABLE IF NOT EXISTS sessions (session_id varchar(24) NOT NULL, last_active int(10) unsigned NOT NULL, contents text NOT NULL, PRIMARY KEY (@987654326 @), KEY last_active (last_active) ) ENGINE=MyISAM 默认字符集=utf8;
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    检查您的日志是否有错误。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多