您的位置:首页 > 其它

Kohana使用auth模块session_type选择database时无法写入session的问题解决

2012-05-16 16:33 295 查看
把用户登陆的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都一样,容易破解,但是你好歹也在开发手册中提一下啊)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐