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

8 篇文章 0 订阅

把用户登陆的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都一样,容易破解,但是你好歹也在开发手册中提一下啊)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值