Как сгенерировать уникальные переменные URL, соответствующие записи в базе данных?

StackOverflow https://stackoverflow.com/questions/1065631

Вопрос

Я хочу иметь возможность генерировать переменные URL, подобные этому:

http://example.com/195yq
http://example.com/195yp
http://example.com/195yg
http://example.com/195yf

Переменные будут соответствовать набору записей MySQL, так что я смогу извлечь их.Во время создания этого набора записей я хочу создать для него этот ключ.

Как я могу это сделать?Каков наилучший способ сделать это?Существуют ли какие-либо существующие классы, которые я могу использовать?

Спасибо всем

Это было полезно?

Решение

По сути, вам нужна какая-то хэш-функция.

Это может быть функция SHA-1, функция MD5 (как altCogito) или использование других данных, которые у вас есть в записи, и их кодирование.

Как ты думаешь, сколько пластинок у тебя будет?Будьте осторожны при выборе решения, так как хэш-функция должна быть достаточно большой, чтобы хорошо охватить вас, но слишком большой, и вы создадите базу данных большего размера, чем вам нужно.Я использовал SHA-1 и обрезал до 64 или 32 бит, в зависимости от необходимости.

Кроме того, посмотрите на REST.Учтите, что URL-адрес, возможно, не обязательно должен быть таким загадочным...

Другие советы

Это можно сделать довольно просто несколькими способами:

  • Используйте хэш, например MD5.(было бы долго)
  • База-64 кодирование определенного идентификатора или фрагмента данных

Если вы спрашиваете, есть ли что-нибудь, что уже делает это с записями MySQL, я не уверен, что вы найдете что-то подобное с точки зрения дизайна, данные действительно концептуально далеки от URL-адресов на вашем веб-сайте, даже в таких фреймворках, как Grails.Большинство из них даже не пытаются объединить функциональность интерфейса и доступа к данным в единое целое.

В каком контексте вы будете это использовать?Почему бы просто не передать переменные post?Это гораздо более безопасно и аккуратно.Вы по-прежнему будете указывать число в URL, например id= 195yq, и есть способ скрыть их, настроив ваш файл php.ini.

Я надеюсь, что это может быть вам полезно.

Пожалуйста, имейте это в виду.Когда вы передаете переменные в адресной строке, кому-то легко изменить переменную и получить доступ к информации, к которой вы, возможно, не хотите, чтобы они имели доступ.

В приведенных вами примерах похоже, что вы кодируете цифровой первичный ключ на базе base-64.Именно так я бы это сделал и делал это в прошлом, но я не уверен, что это лучше, чем передавать идентификатор в открытом виде, потому что декодирование base-64 тривиально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top