2012-03-18 66 views
1

我已经将我的开发者Kohana服务器设置为使用加密数据库作为默认会话类型。我还将其与Auth结合使用来实现用户身份验证。Kohana 3.2 - 数据库会话在新页面请求中丢失数据

现在我的用户能够正确地进行身份验证,并且会话中存储了身份验证密钥。我还在登录过程中存储了诸如用户的名字和商业名称之类的附加数据。

当我登录功能是准备将用户重定向到用户的仪表板,我能正确地看到所有的数据,当我做$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

我曾经有同样的问题。它允许我使用某些浏览器(safari和firefox)登录,并且无法使用Chrome和Internet Explorer登录。它的工作这么多,调试后,我看到了这个问题,是因为设置

Cookie::$domain = 'domain.tld'; 

的我做它纠正它的工作:围绕

Cookie::$domain = '.domain.tld'; 

检查。

+0

谢谢思南, 是的,我真的在Kohana论坛看到你的帖子,并实施Cookie :: $ domain = FALSE,但不幸的是它没有工作。 我最初尝试与我的'.domain.tld',但我不知道它是否工作正常,因为我有我的服务器实例安装在子目录中,它仍然给我麻烦。 我将很快部署到转换服务器,以便我可以尽快尝试您的建议。 感谢您的意见,我会回复此主题与我的调查结果 谢谢! – reado 2012-03-23 23:31:21

+0

太棒了!现在我已经将我的加密设置整理出来了,通过正确设置域,我可以使用单个session_id正确地工作。 一切工作正常......谢谢大家!这个技巧帮助我了! – reado 2012-03-24 01:27:51

0

您需要使用config组参数调用Session::instance()。默认参数是'default',在这种情况下,您需要像这样调用 - >Session::instance('database')。 或者你可以重命名

return array(
    'database' => array(
    'name' => 'auth_user', 
     ..... 

return array(
    'default' => array(
    'name' => 'auth_user', 
     ..... 

EDIT1:对不起,我没有注意你的bootstrap.php设置...但仍然确保重定向后调用正确会话实例。

编辑2:检查会话的write()method。我认为这是你需要:)

+0

感谢EGIS .. 不幸的是这仍然是演戏了问题。我甚至在基本控制器的before()方法中放了一个'print_r(Session :: instance('database') - > as_array());当我的用户进行身份验证时,它会被填充,但只要我去新页面数组为空。 – reado 2012-03-19 20:05:14

+0

检查我的答案,“编辑2”的一部分:) – egis 2012-03-20 23:26:01

0

检查你的错误日志。

如果您使用的是数据库会话加密,请确保已将“密钥”添加到加密配置文件中。

+0

好吧,所以你的提示绝对有帮助!在我的工作流程中,我编写了自己的Auth驱动程序,连接到我自己的身份验证服务器,通过JSON消息与自定义API进行通信。 在我的过程中,我忘记创建了我的encrypt.php配置文件,现在我可以成功将值写入我的数据库非常棒。问题在于,每次我浏览页面时,它都会继续生成新的ID。 我打算用Cookie :: $ domain参数多玩一些,但我肯定有问题,因为我的encrypt.php文件不存在 谢谢! – reado 2012-03-23 23:52:05

0

随着Session::instance('type')->get()你会得到整个会话数据。
'type'必须或你得到默认的文件类型。如果你将两者混合在一起,你会得到一个Session解密错误。

我认为创建一个包含你所有设置项目的siteConfig文件总是一个好主意。

在会议的情况下,我做了这样的:

Created a config File config/siteConfig.php 

有:

return array('sessionType' => 'database'); 

然后加载的东西有:

$sessType = Kohana::$config->load('siteConfig')->get('sessionType'); 

现在你必须始终您的会议与:

Session::instance($sessType) 

所以做你永远不应该有会话