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

Это уже не так сложно, вы можете просто использовать команду git filter-branch на клоне вашего репозитория, чтобы отбросить ненужные вам подкаталоги, а затем отправить их на новый пульт.

git filter-branch --prune-empty --subdirectory-filter  master
git push  -f .

9
задан Peter Mortensen 2 November 2010 в 03:43
поделиться

3 ответа

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

Попробуйте следующее:

RewriteEngine On
RewriteBase /

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

Это должно перезаписать все после '/' как index.php? user = directory

7
ответ дан 2 November 2019 в 23:09
поделиться

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

2
ответ дан 2 November 2019 в 23:09
поделиться

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

  1. Создайте каталог под названием «users».
  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-адрес, введенный пользователем, и берет бит в конце. Есть множество способов сделать это, вот простой, если вы знаете, что последней частью всегда будет имя пользователя, а не, возможно, имя пользователя / pics /:

 $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-адресами » в A List Apart .

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

Вы создаете каталог под названием "users" (вам не обязательно, но это все упростит), и в этот каталог вы помещаете свой. 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 и, следовательно, должен существовать сценарий, обрабатывающий фактический вывод. Если они это знают, они могут начать сходить с ума, ища каждую дыру в системе безопасности, которую вы, возможно, оставили открытыми.

Ура.

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

Ура.

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

Ура.

4
ответ дан 2 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: