Что это "?" символ в URL, который используется в php?

Я новичок в 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"

  • В чем преимущества и недостатки его использования?

Ответ 1

Хорошие вопросы, кратко,

  • "?" означает начало опроса строка, которая содержит данные, которые должны быть передается на сервер. в этом случае вы передаете user = roa3 в profile.php. Вы можете получить данных с использованием $_GET ['user'] в пределах profile.php. querystring - один из способов отправки данных на сервер из агента клиента. Другой отправляет данные в тело HTTP и POST на сервер, вы не видите данные HTTP POST непосредственно из браузера.

  • querystring может быть отредактирован пользователем и это видно для общественности. Если www.website.com/profile.php?user=roa3 должен быть общедоступным, то это отлично, иначе вы можете использовать сеанса для получения текущего пользователя контекст.

  • это гибкий способ передачи данных в сервер, но он виден и редактируемые для пользователей, для некоторых чувствительные данные, по крайней мере, производят какой-то хэш перед прикреплением это к querystring, это предотвращает пользователям редактировать или понимать смысл этого. Однако это не мешает достойному хакеру что-то не так Веб-сайт. Различные браузеры поддерживают разную максимальную длину URL, длинный URL-адрес составляется этими параметрами querystring. Если вы хотите отправить большой объем данных, поместите данные в тело HTTP и POST на сервер.

Ответ 2

Большинство ответов, которые я видел до сих пор, были с точки зрения 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 разных массива, которые вы можете использовать для получения информации, отправленной веб-страницей на сервер. Вы должны в свое распоряжение...

  • $_ POST ['keyname'], чтобы получить только информацию из метода POST
  • $_ GET ['keyname'], чтобы получить только информацию из метода GET
  • $_ ЗАПРОСИТЬ ['keyname'], чтобы вы могли получать POST, GET и любую информацию COOKIE, которая могла быть отправлена. Сортировка, особенно в тех случаях, когда вы не знаете, какой метод может использовать страница для отправки данных.

Не обращайте внимание на метод $_REQUEST. Если у вас нет такого случая, как я упоминал выше для переменной $_REQUEST, то не используйте его. Вы хотите попробовать использовать "запретить все" и только разрешать x, y, z "подход, когда дело доходит до безопасности. Посмотрите только те данные, которые, как вы знаете, отправили свой собственный сайт, ищите только те комбинации, которые вы ожидаете, и очистите всю информацию до ее использования. Например..

  • Никогда не делайте eval() для чего-либо, проходящего через вышеуказанные методы. Я никогда не видел этого, но это не значит, что люди не пробовали или не делали.
  • Никогда не используйте эту информацию напрямую с базами данных, не чистив их (исследование атак SQL-инъекций, если вы не знакомы с ними)

Это далеко не все, все для безопасности PHP, но мы здесь не для этого. Если вы хотите узнать больше по линии, ну, то это еще один вопрос для SO.

Надеюсь, что это поможет и не стесняйтесь задавать любые вопросы.

Ответ 3

1) Если пользователь регистрируется на вашем сайте, вы должны использовать Sessions для хранения там имя пользователя вместо передачи его в URL, например profile.php?username=roa3

2) Использование символа ? в URL-адресах обычно считается неудачным для Search Engine Optimization. Кроме того, URL-адреса выглядят немного уродливо. Используя mod_rewrite, вы можете сделать то же самое, что и profile.php?user=roa3 или products.php?id=123&category=toys с помощью: site.com/profile/roa3 или products/toys/123.

Использование рамки CodeIgniter даст вам дружественные URL по умолчанию и устранит необходимость в ? в ваших URL-адресах. См. эту страницу для примера.

3) Символ ? также используется внутри кода php-страницы. Например, блок if else, такой как:

if ($x==1)
   $y=2;
else
   $y=3;

также может быть записана как:

$y=($x==1) ? 2 : 3;

Ответ 4

"?" означает, что некоторые GET-переменные должны следовать. В примере используется переменная с именем "user" и назначается переменная с именем "roa3".

Преимущества использования переменных GET:

  • они могут быть помечены как часть URL-адреса

Недостатки

  • они общедоступны. Любой может перехватить и увидеть эту информацию. Эти запросы на URL-адреса даже кэшируются серверами в пути. Поэтому каждый может выдать себя за своего пользователя roa3, просто набрав эту информацию вручную... также они могут изменить roa3 другому пользователю и выдать себя за них.

Вы также можете использовать "&" символ для разделения многих переменных, например: www.website.com/profile.php?user=roa3&fav_colour=blue

Другие параметры:

  • Переменные POST

    • Вы можете отправлять переменные через переменные POST. Эти переменные передаются в заголовке запроса, а не в URL-адресе запроса. они не сразу очевидны и не кэшируются серверами в пути, но их все еще можно прочитать. если у вас нет конвекции HTTPS.
    • переменные в форме могут быть отправлены методами POST или GET. Вы указываете это в "методе" формы. <form action="index.php" method='post'/>
  • Переменные SESSION

    • Переменные сеанса хранятся на сервере. Идентификатор сеанса передается пользователю, и этот идентификатор сеанса передается обратно на сервер каждый раз, когда пользователь делает другой запрос. Этот идентификатор сеанса можно использовать для получения сохраненных переменных сеанса. Таким образом, вы можете сохранить любимый цвет пользователя, его имя и IP-адрес и т.д., Но вы можете сохранить его на сервере, а не на домашнем ПК пользователя.
      Идентификаторы сеансов могут быть выданы, поэтому рекомендуется проверять IP-адрес пользователя и обернуть их в безопасное соединение. например, https.
    • переменные сеанса не могут быть изменены кем-то, кто перехватил запрос.
  • Переменная COOKIE:
    Подобно переменным сеанса, за исключением того, что они хранятся на ПК пользователя, а не на сервере. Они хранятся в домене, и когда они отправляются в этот домен, они повторно передают переменные в заголовке запроса на сервер. Это означает, что пользователь может изменить и взломать переменные или кто-то другой.

Чтобы получить доступ к этим переменным в php, вы можете использовать:

  • $x = $_GET['user'] для переменной get
  • $x = $_POST['user]
  • $x = $_REQUEST['user'] - комбинация переменных get, post и cookie
  • $x = $_COOKIE['user'] - переменные cookie
  • $x = $_SESSION['user'] для доступа к переменным сеанса

(user может быть заменено именем используемой переменной)

Простые материалы, но важно знать, что они на самом деле делают.

Ответ 5

? является частью стандарта HTTP, а не частью PHP. Думаю, я должен указать на это, поэтому, перейдя на другой язык и увидев его снова, вы не смутитесь думать, что есть PHP.

В противном случае есть отличные ответы выше.

Ответ 6

С точки зрения сервера,? это просто другой символ. PHP предоставляет простые методы для частей URL-адреса после? символ, например. для "/profile.php?user=roa3" PHP установит $_GET ['user'] = 'roa3'.

Причина? полезен в URL-адресах, так это то, что браузеры могут создавать динамические URL-адреса с использованием форм - в приведенном выше случае я ожидал бы, что URL-адрес был создан по форме HTTP с полем "пользователь", в который пользователь-пользователь набрал "roa3".

Ответ 7

  • "?" используется для разделения URL-адреса и параметров. Например, это похоже на http://www.url.com/resourcepath?a=b&c=d. В этом случае a = b выглядит как request_parameter = request_value.

  • Ya. Не рекомендуется использовать многие параметры, потому что общий размер url ограничен, и это похоже на запрос GET, где все параметры показаны на URL-адресе, и пользователь может его изменить. В вашем примере скажите, что, если пользователь изменит URL-адрес на "user = techmaddy".

  • Преимущество заключается в том, что он может использоваться для запросов GET. Недостатком является низкая безопасность, ограничение по размеру.