我使用网站上的一个简单整数生成网址,以便用户查看过去的订单。如何模糊网址的参数
http://site.com/order_id/145323
的问题是,这是很容易的,只是改变号码,然后查看其他人的订单。我想知道什么是一个简单的方法来编码这个数字在URL中,然后让PHP解码它,所以它可以运行控制器?它不必是超级安全的,它可以让人们不那么容易地改变数字来查看数据。我试图做类似:
order_id/<?php echo base64_encode($theOrder); ?>
,然后在控制器动作我想:
if($orderId = (int) $this->getRequest()->getParam('order_id') && Mage::getSingleton('customer/session')->isLoggedIn()){
$orderId = (int) $this->getRequest()->getParam('order_id');
$orderId = base64_decode($orderId);
$order = Mage::getModel('sales/order')->load($orderId);
Mage::register('current_order', $order);
$this->loadLayout();
$this->renderLayout();
}
但这并不工作。什么将是一个很好的方式来隐藏该网址中的这个参数?
同意PeeHaa,并且还想补充一点,base64并没有太多的模糊。大多数半技术的人可以识别base64字符串(在2/3的情况下末尾的'='填充是通常的放弃)。 – 2012-04-04 23:00:39
我明白这不是一个很好的解决方案,容易破解,但比现在有更好的解决方案。我会做PeeHaas的解决方案,如果我知道如何,但我没有任何想法在哪里开始运行这样的检查,我需要得到一个临时修复迅速。 – Zac 2012-04-04 23:03:50
除了是高级错误之外,您的方法似乎会完成您想要的任务。为什么它不起作用? – 2012-04-05 01:17:39