Я новичок в PHP. На пути изучения языка PHP я замечаю, что на каком-то веб-сайте будет такой URL-адрес:
www.website.com/profile.php?user=roa3 & …
Мои вопросы:
Что это "?" символ используется?
Если бы я разрабатывал веб-сайт php, я должен использовать его в своем URL-адресе? Например, после того, как пользователь (roa3) успешно войдет в систему, я перенаправляюсь на «www.website.com/profile.php?user=roa3» вместо «www.website.com/profile.php»,
Каковы преимущества и недостатки его использования?
Хорошие вопросы, кратко,
"?" означает начало строки запроса, которая содержит данные, которые должны быть переданы серверу. в этом случае вы передаете user = roa3 на страницу profile.php. Вы можете получить данные с помощью $ _GET ['user'] в profile.php. querystring – один из способов отправки данных на сервер из агента клиента. Другой переносит данные в тело HTTP и POST на сервер, вы не видите данные HTTP POST непосредственно из браузера.
querystring может быть отредактирован пользователем, и это видно для общественности. Если http://www.website.com/profile.php?user=roa3 предназначен для публичного доступа, тогда это нормально, в противном случае вы можете использовать сеанс для получения контекста текущего пользователя.
это гибкий способ передачи данных на сервер, но он видимый и редактируемый для пользователей, для некоторых конфиденциальных данных, по крайней мере, создает какой-то хеш, прежде чем прикреплять его к querystring, что не позволяет пользователям редактировать его или понимать смысл этого. Однако это не мешает приличному хакеру что-то делать с вашим сайтом. Различные браузеры поддерживают разную максимальную длину URL, длинный URL-адрес составляется этими параметрами querystring. Если вы хотите отправить большой объем данных, поместите данные в тело HTTP и POST на сервер.
Большинство ответов, которые я видел до сих пор, были с точки зрения PHP, когда на самом деле это не язык. Ответы, данные до сих пор, были с точки зрения PHP, и методы, которые вы будете использовать для доступа к информации, отличаются от одного языка к другому, но формат, в котором данные находятся в URL-адресе (известном как строка запроса), останется то же (Ex: page.ext? key1 = value & key2 = value & …).
Я не знаю вашего технического опыта или знаний, поэтому, пожалуйста, простите меня …
Существует два разных способа веб-страницы для предоставления данных обратно на веб-сервер. Они известны как методы POST или GET. Там также есть множество других, но ни один из них не должен использоваться в каком-либо веб-дизайне при работе с обычным пользователем. Метод POST отправляется невидимо на сервер и предназначен для «загрузки» данных, тогда как метод GET отображается пользователю как строка запроса в URL-адресе и предназначен только для буквальной «получения» информации.
Не все сайты следуют этому правилу, но могут быть причины, почему. Например, сайт может использовать POST исключительно для того, чтобы обойти кеширование прокси-серверами или вашим браузером или потому, что они используют языки с двумя байтами и могут вызывать проблемы при попытке выполнить GET из-за преобразования кодировки.
Некоторые ресурсы о двух методах и о том, когда их использовать …
http://www.cs.tut.fi/~jkorpela/forms/methods.html http://weblogs.asp.net/mschwarz/archive/2006/12/04/post-vs-get.aspx http: / /en.wikipedia.org/wiki/Query_string
Теперь из строго PHP-позиции теперь есть 3 разных массива, которые вы можете использовать для получения информации, отправленной веб-страницей на сервер. Вы должны в свое распоряжение …
Не обращайте внимание на метод $ _REQUEST. Если у вас нет такого случая, как я упоминал выше для переменной $ _REQUEST, то не используйте его. Вы хотите попробовать использовать «запретить все» и только разрешать x, y, z »подход, когда дело доходит до безопасности. Посмотрите только те данные, которые, как вы знаете, отправили свой собственный сайт, ищите только те комбинации, которые вы ожидаете, и очистите всю информацию до ее использования. Например..
Это далеко не конец, все для безопасности PHP, но мы здесь не для этого. Если вы хотите узнать больше по линии, ну, то это еще один вопрос для SO.
Надеюсь, что это поможет и не стесняйтесь задавать любые вопросы.
1) Если пользователь регистрируется на вашем сайте, вы должны использовать Session, чтобы сохранить там имя пользователя, а не передавать его в url, например profile.php?username=roa3
2) Используя ?
символ в URL-адресах обычно считается неудачным для Search Engine Optimization
. Кроме того, URL-адреса выглядят немного уродливо. Используя mod_rewrite, вы можете сделать то же самое, что и profile.php?user=roa3
или products.php?id=123&category=toys
with: site.com/profile/roa3
или products/toys/123
.
Использование Framework CodeIgniter даст вам дружественные URL-адреса по умолчанию и устранит необходимость ?
s в ваших URL-адресах. См. Эту страницу для примера.
3) ?
символ также используется внутри кода php-страницы. Например, блок if else
такой как:
if ($x==1) $y=2; else $y=3;
также может быть записана как:
$y=($x==1) ? 2 : 3;
«?» означает, что некоторые GET-переменные должны следовать. В примере используется переменная с именем «user» и присваивается переменная, называемая «roa3».
Преимущества использования переменных GET:
Недостатки
Вы также можете использовать символ «&» для разделения многих переменных, например: www.website.com/profile.php?user=roa3&fav_colour=blue
Другие варианты:
Переменные POST
<form action="index.php" method='post'/>
Переменные SESSION
Переменная COOKIE:
Подобно переменным сеанса, за исключением того, что они хранятся на ПК пользователя, а не на сервере. Они хранятся в домене, и когда они отправляются в этот домен, они повторно передают переменные в заголовке запроса на сервер. Это означает, что пользователь может изменить и взломать переменные или кто-то другой.
Чтобы получить доступ к этим переменным в php, вы можете использовать:
$x = $_GET['user']
для переменной get $x = $_POST['user]
$x = $_REQUEST['user']
– комбинация переменных get, post и cookie $x = $_COOKIE['user']
– переменные cookie $x = $_SESSION['user']
для доступа к переменным сеанса ( user
может быть заменен именем используемой переменной)
Достаточно простые вещи, но важно знать, что они на самом деле делают.
? является частью стандарта HTTP, а не частью PHP. Думаю, я должен указать на это, поэтому, перейдя на другой язык и увидев его снова, вы не смутитесь думать, что есть PHP.
В противном случае есть несколько отличных ответов выше.
С точки зрения сервера,? это просто другой символ. PHP предоставляет простые методы для частей URL-адреса после? например, для «/profile.php?user=roa3», PHP установит $ _GET ['user'] = 'roa3'.
Причина ? полезен в URL-адресах, так это то, что браузеры могут создавать динамические URL-адреса с использованием форм – в приведенном выше случае я ожидал бы, что URL-адрес был создан по форме HTTP с полем «пользователь», в который пользователь-пользователь набрал «roa3».
"?" используется для разделения URL-адреса и параметров. Например, это похоже на http://www.url.com/resourcepath?a=b&c=d . В этом случае a = b выглядит как request_parameter = request_value.
Ya, Не рекомендуется использовать многие параметры, потому что общий размер url ограничен, и это похоже на запрос GET, где все параметры показаны на URL-адресе, и пользователь может его изменить. В вашем примере скажите, что, если пользователь изменит URL-адрес на «user = techmaddy».
Преимущество заключается в том, что он может использоваться для запросов GET. Недостатком является низкая безопасность, ограничение по размеру.