将搜索参数保存并恢复为唯一ID

时间:2011-05-03 13:44:54

标签: php hash

Noob在这里提问。我在一个房地产网站上正在检修一些“搜索”页面。我希望能够生成一个唯一的ID (hash?),其中包含搜索的所有参数,例如,用户将获得{{3}形式的URL加载此URL将重复完全相同的搜索。

一些搜索参数只是几个选项中的一个,一些是整数,还有一些关键字(我想在ID之后添加,我猜)。将这些数据塞进字符串的一般方法是什么?我对PHP / MySQL相当熟悉,但我的实践经验几乎没有,所以我不知道“它是如何完成的。”

编辑:我不需要字符串 random ,事实上,我需要这个过程是双向的。也许哈希不是正确的术语。至于为什么 - 我这样做是为了简洁起见,因为当前的URL包含至少22个GET参数。

我有一种讨厌的习惯,就是我总是在Interwebs上问我的问题有点过早,一旦发布,重新考虑就会突然出现在我脑海中。我正在起草一个可能的解决方案。不过,我仍然愿意接受任何建议。

3 个答案:

答案 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