Общедоступный идентификатор пользователя для публичного профиля
Я хочу создать общедоступную страницу профиля для каждого пользователя на моем веб-сайте. Что-то очень похожее на так называемые профили пользователей. Но я не хочу разоблачать Guid, который я использую в качестве ПК. Также я не знаю, насколько уникальным будет имя пользователя в течение всего срока службы сайта, чтобы использовать его в url.
Вопрос в том, как SO сам делает это в url https://stackoverflow.com/users/242506/nubm ? Имя пользователя может быть удалено, и url-адрес все еще работает, но я должен создать какой-то общедоступный идентификатор пользователя далее к моему Guid, который я могу использовать в ссылках на страницу профиля и отображать его в URL-адресах?
Я нашел похожие вопросы должен ли я предоставлять идентификатор пользователя общественности? или Как создать "общедоступную" страницу профиля пользователя в ASP.NET (3.5) но это не совсем то, что я хочу знать.
2 ответов:
Вы можете сделать две вещи.
Сначала вы можете создать дополнительный инкрементный идентификатор в базе данных, либо на ASP.NET таблицы или новую таблицу карт, и дать меньшее число, связанное с Guid. Почему меньшее число? Потому что Guid-это 128 бит и слишком большой, чтобы его можно было использовать в url-адресе.
Затем, вы можете использовать это меньшее число, которое связано с Guid, на url. Единственная проблема эксплойта здесь заключается в том, что любой может найти весь список ваших пользователей. Так у этой публики так и есть не проблема, если у вас есть их также публично. Поэтому используйте номер в своем URL для поиска пользователя,а имя пользователя - для лучшего SEO. Номер остается тем же, но имя может измениться, поэтому только номер используется для поиска пользователя.
Второе решение заключается в сжатии и кодировании 128-битного числа Guid в строку из 73 базовых символов. Я выбрал базовый символ 73, потому что 73-это разрешенные символы un-escape на url.Вот некоторые примеры, которые я нашел для make this преобразование:
Http://jopinblog.wordpress.com/2009/02/04/a-shorter-friendlier-guiduuid-in-net/
Http://buildmaestro.wordpress.com/2011/04/27/installscript-to-transform-guid-into-compressed-guid/
Простое преобразование в base64 (из Дейва транца )
public static string Encode(Guid guid) { string encoded = Convert.ToBase64String(guid.ToByteArray()); encoded = encoded .Replace("/", "_") .Replace("+", "-"); return encoded.Substring(0, 22); } public static Guid Decode(string value) { value = value .Replace("_", "/") .Replace("-", "+"); byte[] buffer = Convert.FromBase64String(value + "=="); return new Guid(buffer); }
Comments