CakePHP:防止在 URL 中获取表单字段

Posted

技术标签:

【中文标题】CakePHP:防止在 URL 中获取表单字段【英文标题】:CakePHP: Prevent GET form fields in URL 【发布时间】:2009-12-22 23:17:49 【问题描述】:

我有一个带有'type'=>'get' 的Cakephp 搜索表单。基本上,表单中的元素之一是图像类型的提交按钮。当表单发布时,在 URL 中我总是得到图像提交按钮的这些 x & y 坐标:

http://site.com/controller/action?x=22&y=36&query=hello

有什么方法可以防止坐标出现在 URL 中?原因是其他人可以使用相同的 URL 来执行相同的搜索,而链接中没有那些不直观的东西。

谢谢!

【问题讨论】:

将按钮移出表单,并在其上粘贴javascript以触发表单提交。 我在尝试访问 $_POST 变量时也得到了这些“x”和“y”坐标。我希望我的表单提交给外部表单处理器,我们将其用作客户登录和下载带有注册的 CSV 文件的集中位置。是他们吗? x 和 y 坐标是当您使用图像类型的提交按钮时。要么忽略它们,要么将提交按钮类型更改为 type="submit"。 【参考方案1】:

您可以在按钮上使用一些 javascript:

document.getElementById('myImageButton').onclick = function() 
    this.form.submit();
    return false;
;

或者,在您的控制器中的 beforeFilter 函数中,您可以检查是否存在不需要的变量,将它们删除并重定向到漂亮的 URL。这确实意味着将发出 2 个 HTTP 请求。

【讨论】:

嗯,我害怕这个 HTTP 请求重复。好吧,我想这是唯一剩下的解决方案。谢谢! 你试过javascript解决方案了吗?【参考方案2】:

听起来你正在寻找Post/Redirect/Get。

以下是在 CakePHP 中执行此操作的两个示例:

Searching on surname Searching on multiple fields

POST 重定向到GET 请求的优点是:

    用户没有收到“您要重新提交吗?”刷新时的对话框 可以将生成的页面/查询添加为书签 您可以利用 CakePHP 的内置 SEF 路由,因此您可以使用 /search/contact 代替带有 /search?q=contact 的 URL

【讨论】:

【参考方案3】:

不要使用submit辅助函数,而是使用button函数并设置按钮类型来提交。

echo $this->Form->**button**($this->html->image('header_search_icon.png'), array(**'type'=>'submit'**));

【讨论】:

以上是关于CakePHP:防止在 URL 中获取表单字段的主要内容,如果未能解决你的问题,请参考以下文章

防止用户在表单中输入 URL

Cakephp - 条件保存

如何防止 CakePHP 3.0 中的多个表单提交?

将输入字段添加到所有表单中 - cakephp

CakePHP 3 中表单字段的加密/解密

CakePHP:向表单添加字段(动态)