我在布局中设置了一个元标记,以确保用户在设定的时间后退出,如果他们保持空闲状态。
<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错误:
/ users / logout / redirect:/ users / account
我在这里做错了什么?
答案 0 :(得分:2)
至少我的理解是,由于Cake将如何翻译和处理斜杠,因此无法使用urlencode
实现此目的。但我不确定具体细节!
一种解决方案是在网址上使用base64_encode
和base64_decode
。
您可以使用某些regex
设置路线以正确处理额外的斜杠。
echo 'http://example.com/users/logout/redirect:' . base64_encode('users/account');
//http://example.com/users/logout/redirect:dXNlcnMvYWNjb3VudA==
答案 1 :(得分:1)
您可以在核心文件中设置超时。
要在登录后重定向,您需要添加
$this->Auth->autoRedirect = true;
app_controller中的。 (请参阅preparing to add auth和AuthComponent Class)
auth组件会注意到您尝试查看的页面已被控制。因此,在呈现登录页面之后,它将在会话中存储页面的URL。
要对其进行测试,您可以在登录视图中执行print_r($_SESSION)
,您将在$_SESSION['Auth']['redirect']
就是这样=)祝你好运
答案 2 :(得分:0)
让我们更容易。我使用Cake 3.2,但我认为旧版本是相同的。
配置路线信息。在Cake 3.2中是/config/routes.php
$routes->connect('/logout', ['controller' => 'Users', 'action' => 'logout']);
现在,您将通过访问网址http://domain.com/logout而不是http://domain.com/Users/logout来注销。
基于您的元标记:
<meta http-equiv="refresh" content="3600;/logout" />
尝试一下,它对我有用:D