用户离开CakePHP删除会话

时间:2011-08-25 22:42:18

标签: php cakephp

我如何检查用户是否已离开我的登录表单?没有登录但实际离开了吗?

我想删除Auth.redirect会话,如果他们选择不登录,那么当他们稍后返回时,他们不会被带到他们之前的会话!

基本上运行这个:

$this->Session->delete('Auth.redirect');

我正在考虑在AppController中进行某种检查,知道何时从登录表单中引用用户并删除会话auth.redirect ???

或者更好的是检查当前页面是否是登录表单,如果没有则删除会话!!!

对于那些感兴趣的人,这是我的登录方法目前的样子:

function login()
{
        if(!(empty($this->data)) && $this->Auth->user())
        {
            $back_to = $this->Session->read('back_to');

            $auth_redirect = $this->Session->read('Auth.redirect');

            if($auth_redirect)
            {
                $this->redirect($auth_redirect, null, true);
            }
            else if($back_to)
            {
                $this->redirect($back_to, null, true);
            }
            else
            {
                $this->redirect($this->Auth->redirect(), null, true);
            }
        }
        else
        {
            $this->Session->write('back_to', $this->referer());
        }
}

由于

3 个答案:

答案 0 :(得分:1)

我对CakePHP不熟悉,但你的问题听起来有点奇怪。您正在谈论PHP,一种服务器端脚本语言。只有在请求进来时才会执行PHP脚本(如果还有一些我还不知道的话,请纠正我。)

因此,当用户调用登录页面时,脚本会被执行。现在考虑以下事项:在加载登录页面之后,用户使用登录页面关闭浏览器选项卡。这不会触发请求,因此无法通知服务器该操作。

也许CakePHP可以做这些神奇的事情,但我认为我们正在讨论无状态HTTP,所以我无法想象如何实现这样的事情。

答案 1 :(得分:0)

您可以在上次收到用户请求时为会话添加时间戳。例如,在AppController::beforeFilter中,只需添加$this->Session->write('lastSeen', time())即可。然后,您可以检查用户上次打开任何页面之间经过的时间,如果该时间间隔太长,则会丢弃Auth.redirect值。

这与会话到期基本相同,只是以更加可控的方式。如果你想计算用户只是将你的页面显示在他的屏幕上作为“活动”的时间,你可以使用一些Javascript AJAX继续向服务器发送请求以发信号“我是活跃的!”< / em>的

尽管如此,这些都是相当多的工作。 HTTP是无状态的,不允许您轻松跟踪用户,期间。实际上,跟踪用户是否“主动”观看您的页面是否会产生巨大的开销,在这种情况下,似乎错误地为您想要使用它的非常狭窄的目的而努力。

答案 2 :(得分:0)

        if($this->here != '/admin/login')
        {
            $this->Session->delete('Auth.redirect');
        }

或者这个:

if($this->here != Router::url(array('admin'=>true,'controller'=>'users','action'=>'login')))
            {
                $this->Session->delete('Auth.redirect');
            }