我如何检查用户是否已离开我的登录表单?没有登录但实际离开了吗?
我想删除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());
}
}
由于
答案 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');
}