Гипертекстовый препроцессор РНР

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    873,77 Кб
  • Опубликовано:
    2013-06-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Гипертекстовый препроцессор РНР















Контрольная по PHP

1. РНР: авторизация доступа

Авторизация средствами web-cepbepa

Для того, чтобы к файлам, находящимся в какой-либо директории, могли иметь доступ лишь определенные посетители, знающие два кодовых слова (логин и пароль), можно использовать встроенные в Web-сервер Apache средства ограничения доступа.

В конфигурационных файлах Apache есть специальная строчка -AccessFileName. Там указано имя файла, найдя который в той или иной папке, Apache выполнит по отношению к ней указания, содержащиеся в этом файле. По традиции этим именем является .htaccess, и именно таким оно установлено на всех серверах хостинга. В файл .htaccess можно поместить команды ограничения доступа к той папке, в которой это файл находится.

Выглядят эти команды так. Вначале указывается название защищенной зоны - AuthName. Именно это название будет впоследствии выводиться в запросе посетителю."Private Zone"Basic

В следующем параметре - AuthUserFile - указывается путь к файлу с логинами и паролями посетителей. Этот файл должен быть создан в особом формате, так как пароли в нем хранятся в зашифрованном виде. Для создания файлов с паролями применяются специальные программы - такую программу вы можете взять, например, в разделе технической поддержки компании. Запускать ее следует из командной строки в формате 69-htpasswd.exe -с имя_файла_паролей логин, а в открывшемся окне ввести пароль (используя только латинские буквы). Чтобы добавить новые логины и пароли в уже имеющийся файл, эту программу следует запускать без параметра.

По традиции файл с паролями посетителей принято называть .htpasswd. Обычно Apache настраивается так, что файлы с именами .htaccess и .htpasswd невозможно просмотреть через Web - при такой попытке будет выдаваться лишь сообщение о запрещении доступа. Однако выполнение такой настройки (для этого надо указать несколько параметров в httpd.conf - конфигурационном файле Apache) - целиком на совести администраторов web-сервера.Итак, пожелав "запаролить" доступ к ресурсам какой-либо папки, создайте файл с именем .htaccess с вышеуказанными параметрами.

Комментарий:

Сделать это командой "Проводника" или "Нортона" вам не удастся, так как эти программы не допускают создание файлов без имени (a .htaccess они воспринимают именно как расширение без имени!), поэтому наберите соответствующий текст в какой-нибудь программе, позволяющей это совершить.

Рис. 1. Пароль на папку средствами web-сервера

Достаточно двух файлов - .htaccess и .htpasswd...

Создав файл .htaccess, загрузите программу для создания файла паролей и поработайте с нею. После этого загрузите оба файла на свой сайт: .htaccess - в закрываемую папку, а файл с паролями - в соответствии с прописанным в .htaccess путем к нему (рис. 1).

Вот и все! Теперь при попытке запроса любого ресурса из защищенной папки (в том числе и картинок, включенных в другие страницы тэгом < img...>) посетителю будет выдан стандартный запрос логина и пароля (рис. 2). Если логин и пароль совпадают с хранящимися в файле паролей (по умолчанию есть три попытки ввода), то доступ разрешается, если нет - средствами web-сервера выводится соответствующее сообщение.

Рис. 2. Запрос на вход в папку

2. Механизм сессии

"Сессия" - несколько абстрактное понятие, означающее нечто вроде "законченного периода работы с сайтом ". Например, в сессию могут входить такие действия, как "приход на сайт - загрузка данных - уход с сайта". Иногда определения сессии разнятся в своей формулировке, но суть примерно такая.

Так вот - с помощью команд "поддержки сессий" РНР можно при заходе посетителя на сайт запоминать какие-либо переменные и потом эти переменные считывать или изменять на других страницах этого сайта. При этом - обратите внимание - в браузер посетителя передаются отнюдь не сами эти переменные, а некий пароль, по которому сервер впоследствии этот браузер узнает и восстановит именно те значения переменных, которые были установлены для данного посетителя.

Иными словами - работа механизма сессий в РНР происходит так. Когда посетитель заходит на сайт и для него устанавливаются какие-либо переменные (сам ли он их вводит или, скажем, они берутся из базы данных), то команды начала и регистрации сессии сохраняют эти переменные в определенном месте на самом сервере (в специальном файле в папке временных файлов сервера.

Рис. 3. Файлы с данными сессий в папке временных файлов сервера. Имена файлов соответствуют идентификаторам сессий

Рис. 4. Содержимое одного из таких файлов. В сессии сохранены переменные: legus, wql, wq2, wq3

Если у посетителя браузер принимает cookie, то ему высылается cookie (с определенным именем - по умолчанию "PHPSESSID"), содержащий так называемый "идентификатор сессии", а если нет, то web-сервер автоматически помещает данный идентификатор в переменную PHPSESSID в каждую ссылку на выдаваемых посетителю страницах сайта (естественно, "внутреннюю" - т. е. ведущую на другие страницы того же самого сайта, с тем же самым доменным именем). Таким образом, идентификатор передается на сервер при каждом заходе посетителя на какую-либо из страниц сайта. При этом идентификатор выбирается либо из соответствующего cookie, установленного посетителю при открытии сессии, либо из адресной строки ссылки, куда этот идентификатор автоматически помещается web-сервером.

Рис. 5. Содержимое cookie с идентификатором сессии

Рис. 6. Ссылка с идентификатором сессии

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

Каждый раз создаётся новый идентификатор сессии. Благодаря хорошему алгоритму генерации вероятность того, что для какой-либо последовательности символов на определенном сервере будет существовать набор сохраненных переменных, пренебрежимо мала. Еще меньше вероятность совпадения двух идентификаторов сессий, так что разные посетители сайта ну никак не смогут получить значения переменных друг друга.

Бесспорно, набор сохраненных переменных, относящихся к одной сессии, будет существовать на сервере не вечно. В параметрах файла конфигурации РНР - php.ini - указывается, какое время жизни устанавливается для cookie с идентификатором сессии (по умолчанию 0 -т. е. до закрытия окна браузера и всех открытых из него окон), а также через какое время данные сессий из папки временных файлов удаляются физически. Кроме того, существует специальная команда "разрушения сессии", которая при своем выполнении уничтожает сохраненные в папке временных файлов данные сессии и тем самым делает недействительным идентификатор сессии. Параметры устанавливаемых cookie, в частности, их "время жизни" также можно задать специальной командой в сценарии на РНР, однако время хранения данных сессии в папке временных файлов определяется параметром в php.ini, так что при использовании виртуального хостинга вам не всегда удастся настроить работу с сессиями полностью так, как вам бы хотелось.

Рис. 7. Файл php.ini, раздел настроек параметров сессий

Чтобы использовать в сценарии на странице возможности работы с сессиями, необходимо включить в него команду session_start () (так как при работе с сессиями используются cookie, то данная команда должна находиться в начале страницы, перед какими-либо выводимыми в браузер данными) - как при первоначальной установке переменных, так и при последующей работе с ними (если в файле php.iniустановлен в 1 параметр session.auto_start, то это делать не обязательно). Чтобы указать, какие переменные следует сохранять в качестве данных сессии, следует использовать команду session register("имя первой переменной", "имя второй переменной",... и т. д.), а чтобы закрыть сессию - команду session_destroy (). При закрытии сессии переменные, переданные сценарию с ее помощью, не обнуляются (последнее делает команда session_unset () ;), так что их можно использовать и в остальной части сценария.

Переменные сессии доступны на сценариях сайта по своим изначальным именам - скажем, если командой session_register переменная $а была зарегистрирована в качестве сессионной, то ее значение будет доступно под тем же самым именем - $а - на всех страницах сайта, где используются сессии (т. е. в их начале размещена команда session_start ()).

Переменные сессии доступны в сценариях сайта по своим изначальным именам. Скажем, если командой session_register переменная $а была зарегистрирована в качестве сессионной, то ее значение будет доступно под тем же самым именем - $а - на всех страницах сайта, где используются сессии (т. е. в их начале размещена команда session_start ()).

Однако в целях безопасности лучше работать в сценарии с переменными сессии через автоматически создаваемые массивы $HTTP_SESSION_VARS и (в РНР версий 4.1 и старше) SSESSION, используя одноименные с переменными элементы этих массивов. Дело в том, что в этом случае сценарий будет огражден от возможных попыток злоумышленников передать ему значения этих переменных через указание их в адресной строке, если сессия не была открыта (в указанные массивы попадают те и только те данные, что были получены с сессией). Такая передача может привести, скажем, к тому, что переменная - пометка об успешном прохождении авторизации будет получена сценарием не из данных сессии (в которых она может появиться только после успешного ввода посетителем правильных логина и пароля), а от злоумышленника.

3. Работа с сессиями в PHP

Инициализация сессии происходит вызовом функции session_start(): bool session_start (void). Данная функция создает и инициализирует уже созданную сессию, переданную через куки или же через $_GET. Эта функция всегда возвращает true. Если пользователь использует ob_gzhandler или ob_start(), то это помогает ему обеспечить правильный вывод информации: bool session_register( mixed $name [, mixed $... ] )

Регистрация новой сессионной переменной происходит при вызове функции session_register(), которая принимает одно или несколько текстовых переменных, значения которых - название будущей сессионной переменной: bool session_unregister (string $name)

Если нужно удалить переменную, то используйте session_unregister с передачей в качестве параметра имя сессионной переменной. Если нужно узнать дату окончания действия кеша или же изменить на новую дату, то необходимо воспользоваться функцией session_cache_expire:session_cache_expire ([string $new_cache_expire])

Если $new_cache_expire не задан, то выдается дата окончания действия кеша, в противном случае проставляется новая дата: string session_id ([string $id])

Узнать или установить ID текущей сессии можно с помощью функции session_id().

Если параметр $id не задан, то возвращается ID текущей сессии, в противном случае устанавливается новый ID: bool session_is_registered (string $name)

Когда необходимо узнать, создана ли какая-то сессионная переменная, то можно использовать функцию session_is_registered().

Это основные функции работы с сессиями. Чтобы обратиться к сессионной переменной, необходимо использовать суперглобальный массив $_SESSION:$_SESSION['name']

Практическое задание

Рис.1 Оформление сайта «Компьютерные курсы»

Листинг программы:

.css

#page {width: 900px;}

#header {background-image: url('img/banner-general.jpg');: lightgrey;: 214px;size: 50px;align: center;}

#menu {background-color: #64e6e6;: 250px;: left;size: 25px;align: left;}

#wrapper{width: 850px;: 0 auto;}

#content {margin-left: 250px;color: #FFF8DC;: 10px;align: justify;}

#footer {height: 50px;color: orange;: 50px 0px 0px 0px;align: center;}

Функциональные блоки.php

<!-- begin header.php -->

<div id="header">

Школа<br> Компьютерной<br> Грамотности

</div>

<!-- end header.php -->.php

<!-- begin menu.php -->

<div id="menu">

<a href="index.php"> О проекте</a></br>

<a href="reg.php"> Регистрация на сайте </a></br>

<a href="metkop.php">Обучение компьютеру</a>

<?php if (isset($_SESSION['user'])) {echo "<br>Вы вошли, как

".$_SESSION['user'];"<br><form method='post' action='unauth.php'>";"<input type='hidden' name='unauth' value='true'>";"<input type='submit' value='Выйти'>";"</form>";} else {"<div id='auth'>";"<form method='post' action='auth.php'>";"<p>Логин:</p>";"<input type='text' name='userlogin'>";"<p>Пароль:</p> ";"<input type='password' name='userpassword'><br>";"<input type='submit' value='Войти'>";"</form>";"</div>";}?><div>

<form method=POST action="results.php">

Администратору <input type="text" name="admin_pass">

<input type="submit" value="Войти"><br>

</form><br></div></div>

<!-- end menu.php -->

Рис. 2 Меню

.php

<!-- begin footer.php -->

<div id="footer">

Дизайн сайта -студия «Три Цвета» | Техническая поддержка @school97.ru | Раскрытие информации | Карта сайта

</div>

<!-- end footer.php -->

Форма сбора данных и запись в БД MySQL

Рис. 3 Форма регистрации

Рис. 4 База данных MySQL

<?php

$familiya = $_POST["familiya"];

$name= $_POST["name"];

$pol = $_POST["pol"];

$mesyac = $_POST["mesyac"];

$god = $_POST["god"];

$nomertel = $_POST["nomertel"];

$email = $_POST["email"];

$login = $_POST["login"];

$pass = $_POST["pass"];

$pass_repeat = $_POST["pass_repeat"];

$db = mysql_connect("localhost", "user5", "123456");(!$db)

{echo "Ошибка при соединении с базой данных";}{mysql_select_db("user5", $db); //выбор базы данных_query ("SET CHARACTER SET utf8", $db);//установка кодировки _query('SET NAMES "utf8";',$db);_query('SET character_set_client="utf8", _set_connection="utf8", character_set_results="utf8", _set_database="utf8", character_set_server="utf8";',$db);

$sql = "INSERT INTO kompkursy (familiya, name, pol, mesyac, god, , email, login, pass, pass_repeat) VALUES ('".$familiya."',

'".$name."',

'".$pol."','".$mesyac."','".$god."','".$nomertel."','".$email."','".$login."','".$pas."','".$pass_repeat."')";_query($sql);$name.", Вы успешно зарегистрировались!";}?>

Рис. 5 Страница просмотра собранных данных

Похожие работы на - Гипертекстовый препроцессор РНР

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!