Авторизация с помощью Cookies
И вот – сама установка cookie под именем auth. Ему устанавливается "время жизни" – 3600 с, т. е. час.
SetCookie("auth","$login $pass",time()+3 600); } }?>
Дальше должен находиться сценарий, который в зависимости от исхода авторизации – т. е. значения переменной $rez – выводит различную информацию. Например, можно отослать посетителя назад на исходную страницу командой Header ("Location…"), как в примере предыдущего раздела этой главы.
На всех остальных страницах "защищенной зоны" должен находиться сценарий проверки содержимого переменной auth (т. е. той, чье имя совпадает с именем поставленного cookie) – т. е. точно такой же скрипт, как и на той, где cookie ставился, только строка проверки должна выглядеть как:
if (substr($k, 0, -2)=="$auth"),
…ну и, естественно, самой команды установки cookie быть не должно. Дальнейший текст страницы – на усмотрение web-мастера: если логин с паролем, полученные из cookie, есть в файле паролей, то, скажем, вывести форму для закачки файлов, если нет – то вежливо распрощаться…
Желательно также сделать страницу "выхода", включив в нее команду установку cookie без параметров – SetCookie ("имя cookie").
В результате в том случае, если посетитель единожды прошел авторизацию, то он может спокойно посещать страницы "защищенной зоны" до тех пор, пока cookie "жив" на его компьютере. Он может закрыть окно браузера и даже выключить компьютер, а потом, включив его, вновь зайти на тот же адрес, используя "Историю" браузера или "Закладки" – и он будет авторизован, если время жизни cookie не истекло. Зато те, кто "подглядит" этот адрес или украдет закладку, но не будет иметь соответствующего cookie, авторизованы не будут.
В отличие от предыдущего способа, данный вариант не является абсолютно надежным в плане сохранности в тайне логина с паролем. Во-первых, cookie с этими данными сохраняется на компьютере посетителя, а значит, теоретически может быть с него похищен (тем, кто просто сядет за этот компьютер и скопирует нужный cookie из той папки, где они хранятся). Во-вторых, возможность захода на web-страницу "защищенной зоны" в течение некоторого времени без необходимости ввода логина и пароля может привести и к нежелательным последствиям – если посетитель забудет зайти на страницу выхода, то любой, кто воспользуется его компьютером до истечения срока действия cookie, с точки зрения сервера будет вполне легальным пользователем и сможет устроить истинному владельцу логина немало проблем.
Стоит сказать, что использовать имя cookie как переменную можно только в том случае, если в файле настройки РНР – php.ini – есть параметр register_globals. Там, где этого параметра нет (например, в РНР версии 4.2 и выше он по умолчанию неактивен), работать с cookies как с обычными переменными не получится. Информацию, помещенную в них, придется получать из массива с названием SHTTPCOOKIEVARS (создается автоматически при обнаружении cookies от данного сайта), используя имя нужного cookie в качестве индекса:
<?php foreach (file("passw/passwr") as $k) { if (substr($k, 0, -2)==$HTTP_COOKIE_VARS['auth']) { $rez=l; } } …
В РНР версии 4.1 и выше вместо $HTTP_COOKIE_VARS можно использовать массив $_СООКIЕ.
Надеюсь, вы поняли, что все эти проверки логинов и паролей в cookies и передающихся между окнами переменных, о которых так подробно рассказывается в этом и предыдущем разделах, предназначены для одной цели – чтобы тот, кто каким бы то ни было образом узнал бы адрес страницы из "защищенной зоны" и зашел бы на эту страницу путем набора ее адреса в адресной строке браузера (или с помощью ярлыка в "Избранном"), не мог бы увидеть на ней то же самое, что и добросовестно прошедшие авторизацию посетители.
Чтобы не приходилось запрашивать от посетителей пароль и логин на каждой странице, где есть возможность совершить те действия, которые крайне нежелательно позволять делать всем подряд – как, например, загрузка файлов или просмотр личной почты – а дать посетителям возможность, единожды введя авторизационные данные, свободно перемещаться по "защищенной зоне". Именно это и является основной задачей описанных технологий.