任何人都可以告诉隐藏传递的值。
这是一个链接
echo $this->Html->link(__(‘Edit’, true), array(‘action’=>‘edit’, $loggeduser[‘id’])) ;
显示的网址是:
http://localhost/cakeapp/authexs/edit/83
我想隐藏 83 ,请帮助我。
答案 0 :(得分:1)
如果要将$ loggeduser ['id']作为链接发送,则不能将其隐藏。除了隐藏外,您可以对其进行加密,然后通过在编辑操作中对其进行解密来使用它。
// Assuming key is stored somewhere it can be re-used for
// decryption later.
$key = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
$id = Security::encrypt($loggeduser[‘id’], $key);
echo $this->Html->link(__(‘Edit’, true), array(‘action’=>‘edit’, $id)) ;
以及您的修改操作
public function edit($id = null) {
if ($id != null) {
$key = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
$id = Security::decrypt($cipher, $key);
}
}
答案 1 :(得分:0)
您在这里有两个选择:
1)按照@Sehdev的建议对ID进行加密-然后解密以获取代码中的ID
2)将链接替换为包含ID为83的隐藏输入的表单,该表单将向/cakeapp/authexs/edit
提交POST请求。然后,您可以在编辑操作中检查请求数据中是否存在ID字段(请参阅Cake2 Docs,以从控制器读取请求数据)
使用Cakes Form Helper,表单可能看起来像这样:
echo $this->Form->create('Authex', ['action' => 'edit']);
echo $this->Form->input('id', ['type' => 'hidden', 'value' => $loggeduser[‘id’]]);
echo $this->Form->submit();
echo $this->Form->end();
我正在努力了解您为什么要在EDIT表单中隐藏ID。如果您担心用户可能会猜到另一个用户ID,那么您将遇到一个重大的安全漏洞,因为您应该在控制器级别实施授权检查,以防止未经授权的访问。
答案 2 :(得分:0)
假设您可以在编辑功能本身中访问$loggeduser
数据,那么您根本无法在URL中完全传递ID,而此时只能从$loggeduser
获取ID。也就是说,您的URL为/authexs/edit
,它将始终编辑当前用户。当然,您也可以在其中允许一个可选的ID,并且仅当$loggeduser
为空时才使用,以允许管理员编辑其他用户。正如@JoeRushton所说,您需要确保对允许的安全性进行检查。