Как сгенерировать уникальные переменные URL, соответствующие записи в базе данных?
-
21-08-2019 - |
Вопрос
Я хочу иметь возможность генерировать переменные 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 тривиально.