<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF73%3APHP_II</id>
		<title>LXF73:PHP II - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF73%3APHP_II"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP_II&amp;action=history"/>
		<updated>2026-05-13T15:16:47Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP_II&amp;diff=6041&amp;oldid=prev</id>
		<title>Yaleks: викификация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP_II&amp;diff=6041&amp;oldid=prev"/>
				<updated>2008-12-15T19:50:28Z</updated>
		
		<summary type="html">&lt;p&gt;викификация&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 19:50, 15 декабря 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 8:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но самая популярная причина ограничения доступа к некоторым&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но самая популярная причина ограничения доступа к некоторым&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;частям сайта в последнее &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;время – &lt;/del&gt;это создание разделов «для своих»&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;частям сайта в последнее &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;время — &lt;/ins&gt;это создание разделов «для своих»&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(Member’s Area), в которых расположена информация, доступная только зарегистрированным пользователям, возможно, по платной подписке. Согласно этой модели, владелец сайта должен быть уверен, что&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(Member’s Area), в которых расположена информация, доступная только зарегистрированным пользователям, возможно, по платной подписке. Согласно этой модели, владелец сайта должен быть уверен, что&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;посетитель, входящий в раздел для своих, имеет на это право. Проще&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;посетитель, входящий в раздел для своих, имеет на это право. Проще&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 40:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 40:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;заголовки браузеру, которые потребуют от него отобразить окно ввода&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;заголовки браузеру, которые потребуют от него отобразить окно ввода&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;пароля. Полученную информацию об имени и пароле затем можно будет&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;пароля. Полученную информацию об имени и пароле затем можно будет&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;прочитать в глобальных &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;переменных - &lt;/del&gt;($PhP_AUTh_USER, $PhP_AUTh_PW, и $PhP_AUTh_TYPE). С их помощью можно проверить&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;прочитать в глобальных &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;переменных — &lt;/ins&gt;($PhP_AUTh_USER, $PhP_AUTh_PW, и $PhP_AUTh_TYPE). С их помощью можно проверить&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;имя пользователя и пароль на соответствие данным из текстового файла,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;имя пользователя и пароль на соответствие данным из текстового файла,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;из базы данных или из любого другого списка&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;из базы данных или из любого другого списка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;давайте начнём не торопясь, с простого сценария, который проверяет наличие имени пользователя (любого!) в переменной $PhP_AUTh_USER. если там ничего нет, сценарий отправит клиенту сообщение &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;“401&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;давайте начнём не торопясь, с простого сценария, который проверяет наличие имени пользователя (любого!) в переменной $PhP_AUTh_USER. если там ничего нет, сценарий отправит клиенту сообщение &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;«401&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Unauthorized” &lt;/del&gt;в заголовке ответа. Этот заголовок укажет браузеру на&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Unauthorized» &lt;/ins&gt;в заголовке ответа. Этот заголовок укажет браузеру на&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;необходимость показать окно авторизации, и на этом сценарий завершается. После того, как пользователь что-то ввёл и нажал на OK, данные&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;необходимость показать окно авторизации, и на этом сценарий завершается. После того, как пользователь что-то ввёл и нажал на OK, данные&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;будут отправлены на сервер и страница будет перезагружена. Поскольку&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;будут отправлены на сервер и страница будет перезагружена. Поскольку&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 97:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 97:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Попробуйте ввести неправильное имя пользователя и правильный&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Попробуйте ввести неправильное имя пользователя и правильный&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;пароль, или же правильное имя пользователя и неправильный пароль,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;пароль, или же правильное имя пользователя и неправильный пароль,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;или же укажите и то и другое неверно. Вы видите, что сервер не принимает такие варианты. а теперь попробуйте ввести в поле для имени пользователя слово &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;“user”&lt;/del&gt;, а в поле для пароля слово &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;“password”&lt;/del&gt;. На этот раз&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;или же укажите и то и другое неверно. Вы видите, что сервер не принимает такие варианты. а теперь попробуйте ввести в поле для имени пользователя слово &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;«user»&lt;/ins&gt;, а в поле для пароля слово &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;«password»&lt;/ins&gt;. На этот раз&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вы авторизованы.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вы авторизованы.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 151:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 151:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Выполнив этот запрос, мы сразу получим результат, которым можем&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Выполнив этот запрос, мы сразу получим результат, которым можем&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;воспользоваться. Не обязательно читать полученные данные, достаточно&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;воспользоваться. Не обязательно читать полученные данные, достаточно&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;просто посчитать, сколько вернулось &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;строк – &lt;/del&gt;ноль (&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;т.е. &lt;/del&gt;такой пары имя/пароль в базе данных нет) или одна (пользователь найден).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;просто посчитать, сколько вернулось &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;строк — &lt;/ins&gt;ноль (&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;то есть &lt;/ins&gt;такой пары имя/пароль в базе данных нет) или одна (пользователь найден).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;mysql_connect(“hostname”, “username”, “password”) or die (“Unable to connect to database.”);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;mysql_connect(“hostname”, “username”, “password”) or die (“Unable to connect to database.”);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mysql_select_db(“dev_i2ii_com”) or die (“Unable to select database.”);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mysql_select_db(“dev_i2ii_com”) or die (“Unable to select database.”);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 158:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 158:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$result = mysql_query($sql);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$result = mysql_query($sql);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$num = mysql_numrows($result);&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$num = mysql_numrows($result);&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Всё, что нам &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;осталось – &lt;/del&gt;это поместить обращение к базе данных в&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Всё, что нам &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;осталось — &lt;/ins&gt;это поместить обращение к базе данных в&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;наш сценарий аутентификации.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;наш сценарий аутентификации.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 186:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 186:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;?&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Мы с вами рассмотрели два способа аутентификации для защиты&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Мы с вами рассмотрели два способа аутентификации для защиты&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;закрытых разделов вашего сайта. какой &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;выбрать – &lt;/del&gt;зависит от того, что&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;закрытых разделов вашего сайта. какой &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;выбрать — &lt;/ins&gt;зависит от того, что&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;именно вы хотите защитить и скольким пользователям требуется получить имена и пароли. Принцип в обоих случаях &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;одинаков – &lt;/del&gt;доступ предоставляется только тогда, когда оба введённых параметра в точности&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;именно вы хотите защитить и скольким пользователям требуется получить имена и пароли. Принцип в обоих случаях &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;одинаков — &lt;/ins&gt;доступ предоставляется только тогда, когда оба введённых параметра в точности&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;совпадают с хранящимися у вас значениями. Вам осталось только принять главное &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;решение – &lt;/del&gt;кому именно вы дадите права доступа.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;совпадают с хранящимися у вас значениями. Вам осталось только принять главное &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;решение — &lt;/ins&gt;кому именно вы дадите права доступа.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP_II&amp;diff=6040&amp;oldid=prev</id>
		<title>Yaleks: Новая: == PHP аутентификация на web-сайте == '''''Пол Хафпенни''' (Paul Halfpenny) рассказывает, как при помощи PHP и MySQL создат...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP_II&amp;diff=6040&amp;oldid=prev"/>
				<updated>2008-12-15T19:49:48Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: == PHP аутентификация на web-сайте == &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Пол Хафпенни&amp;#039;&amp;#039;&amp;#039; (Paul Halfpenny) рассказывает, как при помощи PHP и MySQL создат...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== PHP аутентификация на web-сайте ==&lt;br /&gt;
'''''Пол Хафпенни''' (Paul Halfpenny) рассказывает, как при помощи PHP и MySQL создать на вашем сайте закрытые области, требующие аутентификации.''&lt;br /&gt;
&lt;br /&gt;
Существует множество различных причин для создания&lt;br /&gt;
закрытых областей на вашем web-сайте. Например, вы можете захотеть сделать рабочее место для администраторов, с помощью которого они смогут изменять содержимое сайта или загружать&lt;br /&gt;
новые документы. Это позволит ввести контроль за изменением документов на сайте, а также даст возможность неспециалистам выполнять&lt;br /&gt;
некоторые простые задачи.&lt;br /&gt;
&lt;br /&gt;
Но самая популярная причина ограничения доступа к некоторым&lt;br /&gt;
частям сайта в последнее время – это создание разделов «для своих»&lt;br /&gt;
(Member’s Area), в которых расположена информация, доступная только зарегистрированным пользователям, возможно, по платной подписке. Согласно этой модели, владелец сайта должен быть уверен, что&lt;br /&gt;
посетитель, входящий в раздел для своих, имеет на это право. Проще&lt;br /&gt;
всего добиться этой цели, запросив у каждого посетителя имя и пароль. Но как же убедиться, что имя и пароль правильные?&lt;br /&gt;
&lt;br /&gt;
На самом деле, есть очень много способов это сделать.&lt;br /&gt;
Например, вы можете использовать базовую авторизацию HTTP&lt;br /&gt;
и прописать все пары имени/пароля прямо в коде сценария. Или же&lt;br /&gt;
держать эту информацию в базе данных. Ниже мы рассмотрим оба&lt;br /&gt;
этих варианта&lt;br /&gt;
&lt;br /&gt;
=== HTTP-аутентификация на PHP ===&lt;br /&gt;
Начнём с сохранения пользовательских данных в нашем сценарии.&lt;br /&gt;
базовая HTTP-авторизация служит для аутентификации пользователей,&lt;br /&gt;
пытающихся прочитать защищённую страницу, и построена по схеме&lt;br /&gt;
«запрос-ответ». Первый запрос приходит, когда пользователь запрашивает файл с сервера. если файл находится в защищённой области,&lt;br /&gt;
сервер отправляет код 401 (неавторизованный пользователь) в заголовке ответа клиенту. Web-браузер клиента распознаёт этот ответ и&lt;br /&gt;
показывает пользователю всплывающее окно с предложением ввести&lt;br /&gt;
имя и пароль. После того, как пользователь указал эти данные и нажал&lt;br /&gt;
кнопку OK, браузер отправляет их серверу.&lt;br /&gt;
&lt;br /&gt;
если имя пользователя и пароль были признаны правильными,&lt;br /&gt;
защищённый файл передаётся клиенту. Подтверждение прав доступа&lt;br /&gt;
будет происходить постоянно, пока авторизованный пользователь находится в защищённом разделе. Но если имя и пароль, набранные в диалоге браузера, сервер счёл неправильными, окно для их ввода будет&lt;br /&gt;
показано снова, чтобы можно было повторить попытку. Этот цикл будет&lt;br /&gt;
продолжаться до тех пор, пока не будут введены корректные данные,&lt;br /&gt;
или пока пользователю не надоест.&lt;br /&gt;
&lt;br /&gt;
При помощи простого сценария на PHP мы можем сымитировать эту&lt;br /&gt;
систему запроса-ответа базовой авторизации HTTP, отправляя нужные&lt;br /&gt;
заголовки браузеру, которые потребуют от него отобразить окно ввода&lt;br /&gt;
пароля. Полученную информацию об имени и пароле затем можно будет&lt;br /&gt;
прочитать в глобальных переменных - ($PhP_AUTh_USER, $PhP_AUTh_PW, и $PhP_AUTh_TYPE). С их помощью можно проверить&lt;br /&gt;
имя пользователя и пароль на соответствие данным из текстового файла,&lt;br /&gt;
из базы данных или из любого другого списка&lt;br /&gt;
&lt;br /&gt;
давайте начнём не торопясь, с простого сценария, который проверяет наличие имени пользователя (любого!) в переменной $PhP_AUTh_USER. если там ничего нет, сценарий отправит клиенту сообщение “401&lt;br /&gt;
Unauthorized” в заголовке ответа. Этот заголовок укажет браузеру на&lt;br /&gt;
необходимость показать окно авторизации, и на этом сценарий завершается. После того, как пользователь что-то ввёл и нажал на OK, данные&lt;br /&gt;
будут отправлены на сервер и страница будет перезагружена. Поскольку&lt;br /&gt;
на этот раз в переменной $PhP_AUTh_USER будет содержаться&lt;br /&gt;
введённое имя пользователя, первая часть сценария окажется пропущена и заголовок 401 не будет отправлен.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
// File Name: auth01.php&lt;br /&gt;
// Содержится ли что-нибудь в $PHP_AUTH_USER&lt;br /&gt;
if (!isset($PHP_AUTH_USER)) {&lt;br /&gt;
// Пусто - выдать диалог для ввода пароля&lt;br /&gt;
header(‘WWW-Authenticate: Basic realm=”Secret Area “’);&lt;br /&gt;
header(‘HTTP/1.0 401 Unauthorized’);&lt;br /&gt;
echo ‘Authorization Required.’;&lt;br /&gt;
exit;&lt;br /&gt;
} else {&lt;br /&gt;
// Не пусто – вывести значения переменных&lt;br /&gt;
echo “&amp;lt;P&amp;gt;You have entered this username: $PHP_AUTH_ USER&amp;lt;br&amp;gt;You&lt;br /&gt;
have entered this password: $PHP_AUTH_PW&amp;lt;br&amp;gt;The authorization type&lt;br /&gt;
is: $PHP_AUTH_TYPE&amp;lt;/p&amp;gt;“;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь мы собираемся проверить введённые данные на совпадение с&lt;br /&gt;
прописанными в сценарии значениями. Этот метод полезен, если у вас&lt;br /&gt;
всего одна комбинация из имени и пароля (например, если это сценарий&lt;br /&gt;
администрирования сайта). Второй сценарий очень похож на первый,&lt;br /&gt;
главное отличие состоит в том, что если имя/пароль были указаны,&lt;br /&gt;
выполняется оператор if/else: если полученные данные не совпали с&lt;br /&gt;
требуемыми, диалог аутентификации будет показан снова. И только если&lt;br /&gt;
и имя, и пароль совпали с указанным в сценарии значениями, в браузер&lt;br /&gt;
будет выведено сообщение об этом.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
// File Name: auth02.php&lt;br /&gt;
// Содержится ли что-нибудь в $PHP_AUTH_USER&lt;br /&gt;
if (!isset($PHP_AUTH_USER)) {&lt;br /&gt;
// Пусто – выдать диалог для ввода пароля&lt;br /&gt;
header(‘WWW-Authenticate: Basic realm=”Secret Area “’);&lt;br /&gt;
header(‘HTTP/1.0 401 Unauthorized’);&lt;br /&gt;
echo ‘Authorization Required.’;&lt;br /&gt;
exit;&lt;br /&gt;
} else if (isset($PHP_AUTH_USER)) {&lt;br /&gt;
if (($PHP_AUTH_USER != “user”) || ($PHP_AUTH_PW != “password”)) {&lt;br /&gt;
header(‘WWW-Authenticate: Basic realm=”Secret Area”’);&lt;br /&gt;
header(‘HTTP/1.0 401 Unauthorized’);&lt;br /&gt;
echo ‘Authorization Required.’;&lt;br /&gt;
exit;&lt;br /&gt;
} else {&lt;br /&gt;
echo “&amp;lt;P&amp;gt;You’re authorized!&amp;lt;/p&amp;gt;“;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
Попробуйте ввести неправильное имя пользователя и правильный&lt;br /&gt;
пароль, или же правильное имя пользователя и неправильный пароль,&lt;br /&gt;
или же укажите и то и другое неверно. Вы видите, что сервер не принимает такие варианты. а теперь попробуйте ввести в поле для имени пользователя слово “user”, а в поле для пароля слово “password”. На этот раз&lt;br /&gt;
вы авторизованы.&lt;br /&gt;
&lt;br /&gt;
Отрицательная сторона такого метода авторизации состоит в том, что&lt;br /&gt;
многие сайты требуют уникальные имя пользователя и пароль для каждого участника, чтобы администратор сайта мог видеть, сколько человек&lt;br /&gt;
получило доступ в закрытый раздел. кроме того, поскольку в Интернете&lt;br /&gt;
так легко обмениваться информацией, уникальная комбинация имени и&lt;br /&gt;
пароля поможет избежать прекращения платежей за контент после первого же заказа.&lt;br /&gt;
&lt;br /&gt;
=== аутентификация с помощью базы данных ===&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Подсказка&lt;br /&gt;
|Содержание=Аутентификация в CGI&lt;br /&gt;
Глобальные переменные&lt;br /&gt;
$PhP_AUTh_USER, $PhP_AUTh_PW и $PhP_AUTh_TYPE&lt;br /&gt;
доступны только в том случае,&lt;br /&gt;
если PHP установлен в качестве&lt;br /&gt;
модуля сервера Apache. если вы&lt;br /&gt;
используете PHP как CGI-приложение, то ваши возможности&lt;br /&gt;
ограничены аутентификацией&lt;br /&gt;
на основе файле .htaccess, или же&lt;br /&gt;
вам придётся использовать HTML-формы, и проверять введённую&lt;br /&gt;
информацию на совпадение с&lt;br /&gt;
записью из базы данных при&lt;br /&gt;
помощи приложения на PHP.&lt;br /&gt;
|Ширина=150px}}&lt;br /&gt;
Чтобы и вам избежать этого, можно сохранять информацию в текстовом&lt;br /&gt;
файле или в базе данных, так как проверять по ним данные не сложнее,&lt;br /&gt;
чем в предыдущем случае. Оба способа хороши, но при увеличении потока посетителей на вашем сайте база данных выигрывает, так как она&lt;br /&gt;
может одновременно обрабатывать множество запросов и обновляться&lt;br /&gt;
на лету.&lt;br /&gt;
&lt;br /&gt;
давайте рассмотрим, как можно сравнивать полученные имя пользователя и пароль с данными из списка, хранящегося в таблице базы данных. В этом примере мы используем функции PHP для подключения к&lt;br /&gt;
базе данных MySQL, но вы можете использовать вместо неё любые другие встроенные функции, что позволит вам использовать любую базу&lt;br /&gt;
данных их числа поддерживаемых в PHP.&lt;br /&gt;
&lt;br /&gt;
для хранения имён пользователей и паролей нам потребуется&lt;br /&gt;
создать таблицу. Назовём её Users, и выглядеть она будет так:&lt;br /&gt;
&amp;lt;pre&amp;gt;+-------------+----------+----------+&lt;br /&gt;
| real_name   | username | password |&lt;br /&gt;
+-------------+----------+----------+&lt;br /&gt;
| Joe Smith   | joe      | ai890d   |&lt;br /&gt;
+-------------+----------+----------+&lt;br /&gt;
| Jane Smith  | jane     | 29hj0jk  |&lt;br /&gt;
+-------------+----------+----------+&lt;br /&gt;
| Mary Smith  | mary     | fsSS92   |&lt;br /&gt;
+-------------+----------+----------+&lt;br /&gt;
| Bob Smith   | bob      | 2NNg8ed  |&lt;br /&gt;
+-------------+----------+----------+&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вам нужно выполнить поиск записи, поля username и password&lt;br /&gt;
для которой совпадают с введенными пользователем. Это можно сделать при помощи следующего SQL-запроса:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;SELECT * FROM users WHERE username='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'&amp;lt;/source&amp;gt;&lt;br /&gt;
Выполнив этот запрос, мы сразу получим результат, которым можем&lt;br /&gt;
воспользоваться. Не обязательно читать полученные данные, достаточно&lt;br /&gt;
просто посчитать, сколько вернулось строк – ноль (т.е. такой пары имя/пароль в базе данных нет) или одна (пользователь найден).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;mysql_connect(“hostname”, “username”, “password”) or die (“Unable to connect to database.”);&lt;br /&gt;
mysql_select_db(“dev_i2ii_com”) or die (“Unable to select database.”);&lt;br /&gt;
$sql = “SELECT * FROM users WHERE username=’$PHP_AUTH_USER’ and&lt;br /&gt;
password=’$PHP_AUTH_PW’”;&lt;br /&gt;
$result = mysql_query($sql);&lt;br /&gt;
$num = mysql_numrows($result);&amp;lt;/source&amp;gt;&lt;br /&gt;
Всё, что нам осталось – это поместить обращение к базе данных в&lt;br /&gt;
наш сценарий аутентификации.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
// File Name: auth04.php&lt;br /&gt;
if (!isset($PHP_AUTH_USER)) {&lt;br /&gt;
 header('WWW-Authenticate: Basic realm=&amp;quot;Secret Area &amp;quot;');&lt;br /&gt;
 header('HTTP/1.0 401 Unauthorized');&lt;br /&gt;
 exit;&lt;br /&gt;
 } else if (isset($PHP_AUTH_USER)) {&lt;br /&gt;
  // Не пусто – произвести поиск в базе данных&lt;br /&gt;
  mysql_connect(&amp;quot;hostname&amp;quot;, &amp;quot;username&amp;quot;, &amp;quot;password&amp;quot;) or die (&amp;quot;Unable to connect to database.&amp;quot;);&lt;br /&gt;
  mysql_select_db(&amp;quot;dev_i2ii_com&amp;quot;) or die (&amp;quot;Unable to DB.&amp;quot;);&lt;br /&gt;
  $sql = &amp;quot;SELECT * FROM users WHERE username='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'&amp;quot;;&lt;br /&gt;
  $result = mysql_query($sql);&lt;br /&gt;
  // Посчитаем число записей в результате. 0 – авторизаци провалилась, 1 – прошла успешно.&lt;br /&gt;
  $num = mysql_numrows($result);&lt;br /&gt;
  if ($num != &amp;quot;0&amp;quot;) {&lt;br /&gt;
  echo &amp;quot;&amp;lt;P&amp;gt;You're authorized!&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
  exit;&lt;br /&gt;
  } else {&lt;br /&gt;
   header('WWW-Authenticate: Basic realm=&amp;quot;Secret&amp;quot;');&lt;br /&gt;
   header('HTTP/1.0 401 Unauthorized');&lt;br /&gt;
   echo 'Authorization Required.';&lt;br /&gt;
   exit;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
Мы с вами рассмотрели два способа аутентификации для защиты&lt;br /&gt;
закрытых разделов вашего сайта. какой выбрать – зависит от того, что&lt;br /&gt;
именно вы хотите защитить и скольким пользователям требуется получить имена и пароли. Принцип в обоих случаях одинаков – доступ предоставляется только тогда, когда оба введённых параметра в точности&lt;br /&gt;
совпадают с хранящимися у вас значениями. Вам осталось только принять главное решение – кому именно вы дадите права доступа.&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>