CakePHP-用户空闲时间限制后自动注销

CakePHP-用户空闲时间限制后自动注销,cakephp,redirect,logout,Cakephp,Redirect,Logout,我已经在我的布局中设置了一个元标记,以确保用户在设置的时间后注销,如果他们保持空闲状态 <meta http-equiv="refresh" content="3600;url=http://www.example.com/users/logout/redirect:%2Fusers%2Faccount" /> 如您所见,我试图将当前URL(编码)作为重定向参数传递,以便在调用注销操作并重定向到登录页面时,登录页面将知道将用户重定向回系统自动注销时用户正在执行的操作的页面 但是

我已经在我的布局中设置了一个元标记,以确保用户在设置的时间后注销,如果他们保持空闲状态

<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


我在这里做错了什么?

至少我的理解是,使用
urlencode
是不可能实现这一点的,因为斜杠是如何翻译和处理的。但是我不确定具体细节

一种解决方案是在URL上使用
base64\u编码
base64\u解码

您可以使用一些
regex
设置路由,以正确处理额外的斜杠

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

至少我的理解是,使用
urlencode
不可能实现这一点,因为Cake将如何翻译和处理斜杠。但是我不确定具体细节

一种解决方案是在URL上使用
base64\u编码
base64\u解码

您可以使用一些
regex
设置路由,以正确处理额外的斜杠

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

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

要在登录后重定向,您需要添加

$this->Auth->autoRedirect = true;
在app_控制器中。(见和)

auth组件将注意到您试图查看的页面是受控的。因此,在呈现登录页面后,它将在会话中存储页面的url。 要测试它,您可以在登录视图中执行
print\r($\u SESSION)
,您将在
$\u SESSION['Auth']['redirect']下看到它。


就这样=)祝你好运

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

要在登录后重定向,您需要添加

$this->Auth->autoRedirect = true;
在app_控制器中。(见和)

auth组件将注意到您试图查看的页面是受控的。因此,在呈现登录页面后,它将在会话中存储页面的url。 要测试它,您可以在登录视图中执行
print\r($\u SESSION)
,您将在
$\u SESSION['Auth']['redirect']下看到它。


好了,祝你好运,让我们更容易些。我使用Cake 3.2,但我认为旧版本是一样的

配置路由信息。在Cake 3.2中,位于/config/routes.php中

$routes->connect('/logout', ['controller' => 'Users', 'action' => 'logout']);
现在,您将通过访问URL而不是登录

基于元标记:

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


试试看,它对我有用:让我们更容易些。我使用Cake 3.2,但我认为旧版本是一样的

配置路由信息。在Cake 3.2中,位于/config/routes.php中

$routes->connect('/logout', ['controller' => 'Users', 'action' => 'logout']);
现在,您将通过访问URL而不是登录

基于元标记:

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


试试看,它对我有用:谢谢。我一直在考虑使用base64,这样我就可以将用户名也传递到登录表单,并为他们自动填充该字段。谢谢。无论如何,我都在考虑使用base64,这样我就可以将用户名传递到登录表单,并为他们自动填充该字段。为什么要重新发明轮子?在
core.php
内的
Session.timeout
中设置空闲时间,并使用Auth组件管理登录重定向。你不需要在布局中使用该元。我不知道Session.timeout。现在我在哪里可以让Auth重定向回用户所在的页面?为什么要重新发明轮子?在
core.php
内的
Session.timeout
中设置空闲时间,并使用Auth组件管理登录重定向。你不需要在布局中使用该元。我不知道Session.timeout。现在我在哪里可以让Auth重定向回用户所在的页面?