现在,我只需在网址中使用其ID即可获取数据库中产品的信息:http://www.example.com/?productID=5
现在我猜猜下一个,因为这些ID都是自动递增的
你会如何隐藏这个ID并用更好的东西替换它?我的意思是它仍然必须是一个唯一的标识符
为了使它复杂化,我想我可以使用全局唯一标识符,并将其添加到另一列的数据库中。但我觉得这不是最好的方法:)
请让我知道你的想法,告诉我你在项目中如何解决/解决这个问题。
我基本上想要的是摆脱了解下一个/之前的ID。
产品本身没有安全限制。用户很可能被允许看到它们。我当时认为这种技术可以阻止抓取所有产品?!?
就像amazon.com所做的那样:看起来他们以某种方式隐藏了商品的ID,对吗?
答案 0 :(得分:2)
你也可以使用一个非常适合SEO的slug。所以产品1 slug可能是http://www.example.com/?productSlug=exampleitemnameasoneword 你必须确保slug是独一无二的。您当然需要在数据库条目中使用slug字段并能够输入/编辑它。
答案 1 :(得分:1)
首先,看看mod_rewrite。
我正在使用CakePhp
,这使我可以轻松访问由.htaccess
规则创建的网址。在我的情况下,我的标题是100%独特的,这使我有一个slug版本的标题。
例如,我的标题是SZD-51 Junior
,这将成为SZD-51_Junior
。我只是将此slug
添加到我的数据库中,并将其用作辅助唯一标识符。当用户访问www.example.com/planes/SZD-51_Junior
时,我可以执行以下操作:
// pseudo mysql
SELECT *
FROM table
WHERE slug = url_param
//in cakephp
$this->Plane->findBySlug($this->params['slug']);
有很多方法,你想要的网址是什么?哪种格式?
答案 2 :(得分:1)
你可以使用某种散列算法,比如md5(),sha1()等......是的,最好将该散列存储在表格的另一列中,以便更快地查找。
如果使用md5(),最好使用固定或随机盐串来播种它。 我最喜欢的是使用microtime()。
在db insert:
之前生成哈希$salt = "my_secret_salt_string";
$entry['hash_code'] = md5($salt . microtime()); // every time a different result is generated which will ensure uniqueness
// insert into ...
或者,如果您更喜欢将生成的id用作salt,则更新条目:
// insert into ...
// get id
$entry['hash_code'] = md5($id . microtime());
// update ...
答案 3 :(得分:-2)
对此的解决方案是使用post,这只是我做的快速混搭。
<?php
//how to handle the request
if(isset($_POST['transfer']) && !empty($_POST['transfer']))
{
$transfer = $_POST['transfer'];
//what to do?
}
?>
//how to make a link with id 5
<a href="javascript:transfer('5');">link</a>
//this is for the functionality
<form id="transfer_form" action="http://www.example.com/" method="POST">
<input type="hidden" id="transfer" name="productID" value="" />
</form>
//this should be placed within the <head>
<script>
function tranfer(link)
{
document.getElementById('transfer').value = link;
document.getElementById('transfer_form').submit();
}
</script>