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 中获取表单字段的主要内容,如果未能解决你的问题,请参考以下文章