Сохранить и восстановить параметры поиска как уникальный идентификатор - PullRequest
2 голосов
/ 03 мая 2011

нубский вопрос тут.Я перерабатываю некоторые страницы "Поиск" на сайте недвижимости.Я хотел бы иметь возможность генерировать уникальный идентификатор (хэш?) , который содержит в себе все параметры поиска, например, пользователю будет предоставлен URL в виде http://search.example.com/a95kl53df-02, и загрузка этого URL будет повторять точно такой же поиск.

Некоторые из параметров поиска являются просто одним из нескольких вариантов, некоторые целыми числами, а также есть ключевые слова (которые я просто добавлю после идентификатора,Похоже).Каков общий подход к объединению этих данных в строку?Я довольно хорошо разбираюсь в PHP / MySQL, но мой практический опыт практически отсутствует, поэтому я не знаю, «как это делается».

РЕДАКТИРОВАТЬ: мне не нужна строка, чтобы быть random , и, действительно, мне нужно, чтобы процесс был двусторонним.Возможно, хэш не является правильным термином.Что касается того, почему - я делаю это ради краткости, так как текущие URL содержат как минимум 22 параметра GET.

У меня есть неприятная привычка всегда задавать свои вопросы по Interwebs слишком рано, пересмотрыпоявляется прямо в моей голове, как только я отправил.Я сейчас готовлю возможное решение.Я все еще открыт для любых предложений.

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Хеши не уникальны

Хэш НЕ уникален, вы не можете его использовать.Любой хеш может быть результатом бесконечного числа заданных строк.

Вам не нужна случайность, просто уникальный токен

Вам просто нужно сгенерировать уникальный токен с помощью базы данных (даже просто с автоматически индексируемым идентификатором).Вы можете создать cronjob, который через некоторое время удалит старые поиски.

Эта таблица будет содержать минимальный уникальный маркер плюс исходную строку поиска.

Возможная реализация

  • Пользователь выполняет поиск
  • Параметры поиска хранятся в базе данных, токен возвращается
  • Токен передается пользователю каким-либо образом (например, вы хотите сохранить этот поиск позже)
  • Когда пользователь хочет повторить поиск с токеном, строка поиска извлекается из базы данных и запускается поиск
1 голос
/ 03 мая 2011

Вы можете использовать что-то вроде mcrypt() на $_SERVER['QUERY_STRING'], а затем расшифровать его, если передан зашифрованный URL. Однако здесь есть все виды проблем, и я рекомендую этого не делать.

Исходя из ваших правок, которые вы делаете из-за сложного URL, я бы предположил, что хеширование усугубит проблему. Если у вас есть ошибка с URL-адресом, теперь у вас есть несколько мест, где она может работать неправильно.

Просто создайте случайный ключ, который затем ищите в простой базе данных с плоскими файлами. Вы можете проверить, есть ли URL в базе данных, а затем вернуть ключ, если он есть.

Еще одним преимуществом этой системы является то, что если структура вашего URL изменяется, то вы можете изменить все URL-адреса в базе данных, и короткие URL-адреса пользователей по-прежнему будут работать.

0 голосов
/ 03 мая 2011

Что ж, чтобы быть random (что, кстати, вы никогда не может быть ), вы можете хешировать, скажем, микровремя (случайное-sh, так как есть низкая вероятность того, что 2 пользователя будут искать одновременно) вместе с солью, с чем вы можете использовать это идентификатор запроса:

так что-то вроде:

$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

UPDATE

Из-за комментариев ниже, я предлагаю другое решение (которое может быть больше 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...