2011-05-14 97 views
1

我在搞KO3和auth模块,我登录工作得很好,但我注意到每次刷新页面时,我的用户登录计数都会增加。Kohana auth统计get_user作为登录?

我很确定它来自这一部分。

// Check if logged in 
if ($this->auth->logged_in()) 
{ 
    // Pass user to view 
    $this->view->user = $this->auth->get_user(); // Here? 
} 
else 
{ 
    // Attempt auto login 
    $this->auth->auto_login(); 

    // Check if logged in 
    if ($this->auth->logged_in()) 
    { 
     // Pass user to view 
     $this->view->user = $this->auth->get_user(); 
    } 
} 

现在我很确定它是我将用户对象传递给视图的行。该行注释了// Here?

我只是想知道为什么这会增加登录。我已经检查了源代码,它正在做的是读取会话变量。

编辑

我想我有这个固定后,我不得不给我解释。显然不是。我不确定这是否会议,我尝试使用GitHub仓库中的cookie和会话类,但没有任何区别。

我不知道从哪里开始调试。

+0

我猜这不是一个容易回答的问题。 – Olical 2011-05-14 21:25:15

+0

会话是否正常工作?我认为,问题是'auto_login()'调用。 – biakaveron 2011-05-15 06:08:43

+0

@biakaveron是的,会议罚款,科莫告诉我什么是错的。 'logged_in'调用'auto_login',从而登录每个页面视图。 – Olical 2011-05-15 21:10:15

回答

2

你监督的事实,你的整个else块是ambigous,因为一个调用Auth_ORM :: LOGGED_IN()产生以下结果:

Auth_ORM::logged_in() 
-> Auth_ORM::get_user() 
-> Auth_ORM::auto_login() 
-> Auth_ORM::complete_login() 
-> Model_Auth_User::complete_login() 

所以,你的代码实际上将做同样的看起来像这个:

// Check if logged in 
if ($this->auth->logged_in()) 
{ 
    // Pass user to view 
    $this->view->user = $this->auth->get_user(); 
} 

Model_Auth_User::complete_login()是登录计数增加的地方。

您的问题是总是调用Auth_ORM::auto_login()(无论是因为PEBKAC还是会话不正常),请设置新的令牌而不是将用户对象保存到会话中。

+0

我从来不知道'logged_in'叫'auto_login'!非常感谢你解释这一点。我想我会知道是否有任何文件。来吧,[空文件](http://kohanaframework.org/3.0/guide/auth)?再次感谢您的帮助。 – Olical 2011-05-15 21:09:10

+0

我不同意它。正如你所看到的(https://github.com/kohana/auth/blob/3.0%2Fmaster/classes/kohana/auth/orm.php#L192),'get_user()'方法只会调用'auto_login()'如果你的会话没有'User'对象(https://github.com/kohana/auth/blob/3.0%2Fmaster/classes/kohana/auth.php#L87)。当你第一次打开一个页面(刚刚创建的会话)时,它是真实的,但刷新后,Auth将获得一个'User'对象。这就是为什么我问你关于会议的工作。 – biakaveron 2011-05-16 05:10:26

+0

嗯...我错过了科莫的最后一段:) – biakaveron 2011-05-16 05:13:23