Noob在这里提问。我在一个房地产网站上正在检修一些“搜索”页面。我希望能够生成一个唯一的ID (hash?),其中包含搜索的所有参数,例如,用户将获得{{3}形式的URL加载此URL将重复完全相同的搜索。
一些搜索参数只是几个选项中的一个,一些是整数,还有一些关键字(我想在ID之后添加,我猜)。将这些数据塞进字符串的一般方法是什么?我对PHP / MySQL相当熟悉,但我的实践经验几乎没有,所以我不知道“它是如何完成的。”
编辑:我不需要字符串 random ,事实上,我需要这个过程是双向的。也许哈希不是正确的术语。至于为什么 - 我这样做是为了简洁起见,因为当前的URL包含至少22个GET参数。
我有一种讨厌的习惯,就是我总是在Interwebs上问我的问题有点过早,一旦发布,重新考虑就会突然出现在我脑海中。我正在起草一个可能的解决方案。不过,我仍然愿意接受任何建议。
答案 0 :(得分:1)
哈希不是唯一的,你不能使用它。任何散列都可能来自无限数量的给定字符串。
您应该在数据库的帮助下生成一个唯一的令牌(即使只是一个自动索引的ID)。您可以创建一段时间后删除旧搜索的cronjob。
该表最低限度地包含唯一标记加上原始搜索字符串。
答案 1 :(得分:1)
您可以在mcrypt()
上使用$_SERVER['QUERY_STRING']
之类的内容,然后在传入加密的URL时对其进行解密。但是,此处存在各种问题,我建议不要这样做。
根据你的编辑,你因为一个复杂的URL而这样做,我建议哈希会使问题变得更糟。如果您的网址出错,那么您现在有多个地方可能会出错。
只需创建一个随机密钥,然后在简单的平面文件数据库中查找。您可以检查URL是否已存在于数据库中,然后返回密钥(如果是。)
此系统的另一个优点是,如果您的网址结构发生变化,那么您可以更改数据库中的所有网址,用户的短网址仍可用。
答案 2 :(得分:-2)
好random
(顺便说一下,你 永远不会 ),你可以哈希让我们说一下microtime(这是随机的) ,因为2个用户同时搜索的可能性很小)和一些盐,你可以使用的是查询ID:
如下所示:
$store_unique = md5(microtime().$queryID);
//the $store_unique you can save to the db with the query params
//then when anyone goes to the random url, you can check it against the db
<强>更新强>
由于下面的评论,我提供了另一种解决方案(可以更多unique
):
$store_unique = microtime(). "-" .$queryID;
//the $store_unique you can save to the db with the query params
//then when anyone goes to the random url, you can check it against the db