我已将我的开发Kohana服务器设置为使用加密数据库作为默认会话类型。我也将它与Auth结合使用来实现用户身份验证。
现在,我的用户可以正确进行身份验证,并且身份验证密钥存储在会话中。我还在登录过程中存储了用户名和商家名等附加数据。
当我的登录功能准备好将用户重定向到用户信息中心时,我可以在$session::instance()->as_array();
(Array ( [auth_user] => NRyk6lA8 [businessname] => Dudetown [firstname] => Matt )
)
只要我将用户重定向到另一个页面,$session::instance()->as_array();
就会为空。
通过转储Session :: instance()对象,我可以看到Session ID仍然是相同的。
当我查看我的数据库表时,我没有看到任何会话记录被保存,我的会话表是空的。
我的bootstrap.php包含:
Session::$default = 'database';
Cookie::$salt = 'asdfasdf';
Cookie::$expiration = 1209600;
Cookie::$domain = FALSE;
我的session.php配置文件如下:
return array(
'database' => array(
'name' => 'auth_user',
'encrypted' => TRUE,
'lifetime' => 24 * 3600,
'group' => 'default',
'table' => 'sessions',
'columns' => array(
'session_id' => 'session_id',
'last_active' => 'last_active',
'contents' => 'contents'
),
'gc' => 500,
),
);
我看起来很高很低的答案..如果有人有任何建议,我都是耳朵!
谢谢!
答案 0 :(得分:0)
您需要使用config group参数调用Session::instance()
。默认参数为'default'
,在这种情况下,您需要像这样调用 - > Session::instance('database')
。
或者你可以重命名
return array(
'database' => array(
'name' => 'auth_user',
.....
到
return array(
'default' => array(
'name' => 'auth_user',
.....
Edit1 :抱歉,我没有注意你的bootstrap.php设置...但是仍然要确保在重定向后你调用正确的会话实例。
Edit2 :查看会话的write()
method。我认为这就是你所需要的:)
答案 1 :(得分:0)
检查错误日志。
如果您使用的是数据库会话加密,请确保已添加了一个'密钥'到加密配置文件。
答案 2 :(得分:0)
我曾经遇到过同样的问题。它允许我使用某些浏览器(safari和firefox)登录,并且无法使用chrome和Internet Explorer登录。经过这么多工作和调试后我发现问题是因为设置
Cookie::$domain = 'domain.tld';
我让它纠正了它:
Cookie::$domain = '.domain.tld';
检查周围。
答案 3 :(得分:0)
使用Session::instance('type')->get()
,您可以获得整个会话数据
是'type
'必须或你得到默认的文件类型。如果将两者混合使用,则会出现会话解密错误。
我认为使用Project的所有设置创建siteConfig文件总是一个好主意。
如果会议I我这样做了:
Created a config File config/siteConfig.php
使用:
return array('sessionType' => 'database');
然后加载该东西:
$sessType = Kohana::$config->load('siteConfig')->get('sessionType');
现在,您总是使用以下会话:
Session::instance($sessType)
所以你应该永远不会遇到Sessions问题