有些 URL 仅用于在操作成功后重定向用户。(例如,提交反馈后的“谢谢”页面)。
问题是这些页面可以直接访问。
有没有办法防止这种情况?
function thank_you() {
if($this->referer() != 'some_url') {
$this->redirect('/');
}
}
在您不想直接访问的方法中,只需检查推荐人是否有效(即“谢谢”页面的“联系表”。
如果推荐人不是“联系表”,您可以重定向到任何地方。如果匹配,则输出感谢页面。
您可以在操作完成后创建并存储一个随机密钥,然后在重定向之前简单地验证该密钥(使用组合或会话、url 或 db,您的选择)是否有效。
看起来 Controller::flash可以帮助你。
我会在重定向之前在页面上设置一个会话变量。然后在“谢谢”页面上,对变量进行测试并取消设置。如果在进行测试时它不存在,则重定向到显示“无法直接访问此页面”的错误页面。
我从未使用过 Cake,所以这是一个通用的 PHP 答案,而不是特定于 Cake 的答案。