2011-07-27 51 views
0

我在布局中设置了一个元标记,以确保用户在设定的时间后保持闲置状态。CakePHP - 在用户闲置时间限制后自动注销

<meta http-equiv="refresh" content="3600;url=http://www.example.com/users/logout/redirect:%2Fusers%2Faccount" /> 

正如你所看到的,我想通过当前URL(编码)作为重定向参数,所以,当注销动作被调用,并重定向到登录页面,登录页面就会知道哪些页面将用户重定向到系统自动注销时他们正在执行的任何操作。

然而,当自动注销时,它重定向到http://www.example.com/users/logout/redirect:%2Fusers%2Faccount如预期,但我得到一个404错误:

/用户/注销/重定向:/用户/账号没有被发现

我在这里做错了什么?

+2

为什么重新发明轮子?在'core.php'内的'Session.timeout'中设置空闲时间,并使用Auth组件来管理登录重定向。你不需要你的布局中的元。 – pleasedontbelong

+0

我不知道Session.timeout。现在我将在哪里获得Auth重定向回用户所在的页面? – BadHorsie

回答

2

我的理解至少是因为斜杠将如何被翻译和处理,因此使用urlencode无法实现此目的。不过,我不确定具体情况!

一种解决方案是使用base64_encodebase64_decode代替URL。

您或许可以设置一些路径,其中一些regex可以正确处理额外的斜杠。

echo 'http://example.com/users/logout/redirect:' . base64_encode('users/account'); 
//http://example.com/users/logout/redirect:dXNlcnMvYWNjb3VudA== 
+0

谢谢。无论如何,我正在考虑使用base64,所以我可以将用户名传递给登录表单,并自动为它们填充该字段。 – BadHorsie

1

您可以在核心文件中设置超时。

你需要在app_controller添加

$this->Auth->autoRedirect = true; 

登录后重定向。 (请参阅preparing to add authAuthComponent Class

auth组件会注意到您尝试查看的页面受到控制。因此,在呈现登录页面之后,它将在会话中存储页面的URL。 为了测试它,你可以做在登录视图print_r($_SESSION),你会看到它在$_SESSION['Auth']['redirect']

就是这样=)祝你好运

0

让我们更容易。我使用Cake 3.2,但我认为旧版本是相同的。

配置路线信息。在蛋糕3.2是/config/routes.php

$routes->connect('/logout', ['controller' => 'Users', 'action' => 'logout']); 

现在,您将通过访问网址http://domain.com/logout,而不是http://domain.com/Users/logout注销。

此基础上你的meta标签:

<meta http-equiv="refresh" content="3600;/logout" /> 

试试吧,它的工作对我来说:d

相关问题