Kohana 3.2 - 数据库会话丢失新页面请求的数据

时间:2012-03-18 05:07:51

标签: database session redirect kohana

我已将我的开发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,        
    ),
);

我看起来很高很低的答案..如果有人有任何建议,我都是耳朵!

谢谢!

4 个答案:

答案 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问题