Как создавать профили пользователей с помощью PHP и MySQL


Мне нужна помощь в создании системы профилей пользователей. Я хочу, чтобы это было похоже на Facebook или Myspace, где после адреса указано только имя пользователя, без вопросительных знаков или чего-либо еще, например, www.mysite.com/username. У меня есть весь реестр, сценарии ведения журнала и т. Д. все сделано, но как мне перейти в профили, используя приведенный выше пример URL "/имя пользователя"?

Author: Peter Mortensen, 2009-07-25

3 answers

Вам нужно будет создать перезапись мода, которая взяла бы первый каталог и передала его в качестве параметра $_GET.

Попробуйте это:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/$ index.php?user=$1

, который должен переписать что-либо после '/' как index.php?user=каталог

 7
Author: Chacha102, 2009-07-25 00:35:17

Вот сокращенная версия моего ответа, на случай, если у кого-нибудь возникнет момент tldr:

  1. Создайте каталог под названием "пользователи".
  2. Внутри этого каталога создайте файл .htaccess со следующим mod_rewrite:

    REQUEST_URIRewriteEngine on

    RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI

Теперь все запросы страниц на любые расширения, не указанные в скобках, сделанные в каталоге пользователей, будут отправляться в index.php

Index.php берет URL-адрес, введенный пользователем, и захватывает бит в конце. Есть множество способов сделать это, вот простой пример, если вы знаете, что последней частью всегда будет имя пользователя, а не, возможно, имя пользователя/фото/:

 $url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/"
 $user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/'
 $user_name = str_replace("/", "", $user_request); //this leaves 'foo'

Теперь просто сделайте запрос в базу данных для этого имени пользователя. Если он существует, index.php выводит профиль, если в нем нет перенаправления скрипта на: /users/404.php

Но если пользователь действительно существует, все, что ваш посетитель увидит, это то, что он вставил

www.example.org/users/foo/

И они попали на страницу пользователя foo.

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


На самом деле, можно избавиться от "?" и иметь приятный простой www.example.org/users/someusername .

Я узнал об этом из статьи Тилля Шарлатана"Как добиться успеха с URL-адресами Отдельном списке.

Таким образом, вам нужно будет понимать Apache, .htaccess и mod_rewrite, и этот метод требует, чтобы вы понимали риски безопасности и учитывали их. Вот основная идея:

Вы создаете каталог под названием "пользователи" (вам не нужно, но это все упростит), и в этот каталог вы помещаете свой файл.htaccess, который содержит mod_rewite, который фактически говорит "все запросы файлов или каталогов, которые не имеют определенного вида (изображения, PDF-файлы), должны быть отправлены в этот скрипт, который будет обрабатывать, куда отправлять пользователя". mod_rewrite из статьи выглядит так:

RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php

В моем примере это было бы "/your_web_root/users/index.php ", причина, по которой это проще, заключается в том, что вместо того, чтобы этот скрипт обрабатывал ВСЕ запросы на вашей странице, он просто обрабатывает запросы в каталоге пользователей.

Затем у вас есть php-скрипт, который говорит: "Хорошо, какой был указан URL-адрес?", и он в основном захватывает часть после последней косой черты (или двух, если в самом конце есть еще один), и ОЧИЩАЕТ то, что он находит (это действительно важно), и говорит: "существует ли это имя пользователя в моей БД?" Если да, то это отправляет отправителя запроса в профиль пользователя, но с красивым URL-адресом (мы перейдем к этому через секунду), если нет, он отправляет их на страницу "Пользователь не найден" или что вы хотите.

Поэтому, если он найдет вашего пользователя, PHP-скрипт выведет профиль пользователя (опять же, обязательно очистите его. Любой пользователь-придурок, который у вас может быть, может - если вы дадите ему такую возможность - внедрить вредоносный код в свой собственный профиль, зная, что браузеры, просматривающие профиль, выполнят этот код). Поскольку запрошенная страница было:

www.example.org/users/example_user

И поскольку вы используете mod_rewrite вместо перенаправления, URL-адрес остается прежним, а сценарий, который выводит файл .htaccess, просто сбрасывает профиль пользователя. Для посетителя они просто видят, что ввели указанный выше URL-адрес, и появился профиль пользователя.

Вы также хотите, чтобы PHP-скрипт проверял, не перенаправляет ли пользователь на страницу "пользователь не найден", вместо того, чтобы просто выводить страницу "user_not_found". Это так любой, кто ставит в:

www.example.org/users/blabhaboehbohe

Увидит, что URL-адрес изменится на

www.example.org/users/notfound/

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

Приветствия.

 4
Author: Anthony, 2009-07-27 18:46:29

Взгляните на механизм перезаписи . В некоторых фреймворках также есть классы для выполнения этой работы, например, в Zend Framework есть zend_router, которые вы можете использовать. Вы можете использовать это самостоятельно, у других фреймворков они тоже есть, проверьте документы на ваш предпочтительный вкус.

 2
Author: Elzo Valugi, 2009-07-25 00:42:02