把用户登陆的session写入数据库,于是配置auth如下:
config/auth.php:
return array(
'driver' => 'orm',
'hash_method' => 'md5',
'hash_key' => 'comasa',
'lifetime' => 43200,
'session_type' => 'database',
'session_key' => 'auth_user',
);
session的配置如下:
config/session.php:
return array(
'native' => array(
'name' => 'session_name',
//'lifetime' => 43200, //默认浏览器关闭时销毁
),
'cookie' => array(
'name' => 'cookie_name',
'encrypted' => TRUE,
'lifetime' => 43200,
),
'database' => array(
'name' => 'database_name',
'encrypted' => TRUE,
'lifetime' => 43200,
'group' => 'default',
'table' => 'sessions',
'columns' => array(
'session_id' => 'session_id',
'last_active' => 'last_active',
'contents' => 'contents'
),
'gc' => 500,
),
);
运行用户登录,提示登录成功,但是刷新页面就会继续提示登录,查看数据库的sessions表,session数据根本没有写入,很奇怪,刚开始还以为是session没有配置好,在代码中单独存储一个session进行测试,session正常写入,看来不是session的问题,难道是auth配置的问题?
再次将auth中“session_type”的配置改为"native"后,运行一切正常,登录也是好的,然后在网上各种找原因,并跟踪源代码,最后发现是因为没有配置"encrypted"的key值。因为在session的配置中,database的驱动"encrypted"的值为TRUE,也就是说存储是时进行加密,所以也要配置key的值。因此配置如下:
config/encrypt.php
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 */ 'key' => 'comasa', 'cipher' => MCRYPT_RIJNDAEL_128, 'mode' => MCRYPT_MODE_NOFB, ), );
其中 “key”的值是默认没有的,正是因为这个值的原因才导致的上面的问题。Kohana中这个值默认没有提供,但是session的配置里面又默认encrypted的值TRUE,而且session登录还不报错,这就太坑爹了啊……(也许是出于安全考虑,让开发者自己设置一个key,避免所有key都一样,容易破解,但是你好歹也在开发手册中提一下啊)。