Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Seansy.doc
Скачиваний:
1
Добавлен:
28.08.2019
Размер:
165.89 Кб
Скачать

Сеансы

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

  1. пользователь закрывает окно браузера;

  2. завершение заданного на сервере максимального интервала времени сеанса;

  3. использование функций PHP, таких, как session_destroy(), чтобы освободить все существующие в данный момент переменные сеанса.

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

Система PHP имеет ряд средств для поддержки сеансов. Это руководство начинается с введения глобальной переменной $_SESSION[]. Переменную $_SESSION[] рекомендуется использовать для улучшения безопасности и удобочитаемости кода.

Также вводятся функции сеанса session_start() и session_destroy(). Каждая из них определена ниже:

$_SESSION[] – суперглобальный массив PHP, который содержит зарегистрированные в данный момент переменные сеанса сценария.

session_start() – инициализация данных сеанса. Эта функция вызывается перед созданием новой переменной сеанса с помощью $_SESSION[].

session_destroy() – разрушает все данные, зарегистрированные для текущего сеанса сценария

В учебнике вводится также функция PHP header("Location …"). Хотя это функция HTTP, а не функция сеанса, она обычно используется для перенаправления пользователей во время существующих сеансов. Эта функция определена ниже.

header("Location: http://www.domain.com") – функция header используется для перенаправления браузера на страницу, определенную параметром Location.

Следующий блок кода демонстрирует, как инициализируется переменная сеанса.

<?php

session_start();

if ($_SESSION['count'] == "") $_SESSION['count'] = 1;

else $_SESSION['count'] = $_SESSION['count'] + 1;

?>

В этом примере сначала вызывается функция session_start() для инициализации данных сеанса. Функция session_start() должна вызываться перед созданием и присваиванием значений переменным сеанса. Затем используется оператор if для проверки значения переменной сеанса "count". Если сеанс будет null или не содержит значения, то он инициализируется как 1, иначе значение переменной сеанса увеличивается на 1. В этом случае переменная сеанса count используется для подсчета числа посетителей. Переменные сеанса предоставляют идеальный способ создания счетчиков страниц, так как каждому пользователю предоставляется уникальный сеанс.

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

<?php

# login.php

#-----------

if ($_POST['submit'] == "Login")

{ // сценарий проверки имени пользователя

// и пароля должен кодироваться здесь

// если аутентификация прошла успешно

session_start();

$_SESSION['access'] = "yes";

header('Location: access.php');

}

if ($_POST['submit'] == "Log Out")

{ //если пользователь решает выйти

session_destroy();

}

?>

<?php

# access.php

#------------

// если пользователь обращается к этой странице,

// проверьте, что он был аутентифицирован в login.php

if ($_SESSION['access'] != "yes") header('Location: login.php');

?>

Пример выше состоит из двух страниц — login.php и access.php. Прежде чем пользователь сможет увидеть содержимое access.php, он должен пройти login.php. Создается сеанс, чтобы гарантировать, что пользователь был аутентифицирован. После того как пользователь вводит действительное имя пользователя и пароль, выполняется щелчок на кнопке "Login". Сценарий PHP проверяет, что пароль и имя пользователя допустимы. Затем переменной сеанса присваивается значение "yes" и доступ предоставляется. Пользователь перенаправляется на страницу access.php. Сценарий на access.php проверяет, что существует сеанс. Если сеанс не существует, применяется функция header(), чтобы перенаправить пользователя назад на страницу login.php и не разрешить доступ к содержимому страницы access.php.

Страница login.php содержит второй сценарий, который используется для уничтожения переменной сеанса, вызывая функцию session_destroy(). Сценарий выполняется после того, как пользователь щелкает на кнопке "Log Out".

Приложения WEB, которые используют данные сеанса, могут быть доступны одновременно множеству пользователей. Чтобы каждый пользователь имел свой собственный сеанс, с каждым сеансом необходимо связать уникальное значение id. В PHP это уникальное значение сеанса id можно извлечь с помощью функции session_id(). Уникальное значение сеанса session_id() поддерживается для каждого пользователя и хранится в подкаталоге PHP/sessiondata, расположенном на сервере WEB.

Так как значение session_id() является уникальным для каждого пользователя, его можно применять для идентификации пользователей, не создавая при этом индивидуальных имен пользователей и паролей. Функция session_id() определена ниже:

session_id() – используется для получения значения id текущего сеанса.

Файлы Cookies

Файл cookie является сообщением браузеру WEB от сервера WEB. Браузер сохраняет сообщение в текстовом файле. Это сообщение посылается затем назад на сервер каждый раз, когда браузер запрашивает страницу с сервера.

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

В PHP файлы cookies создают с помощью функции setcookie(). Все данные cookie хранятся в глобальной переменной PHP $_COOKIE и доступны для последующих страниц.

setcookie(name,value,expiration,path,domain,security) – определяет файл cookie, который посылается вместе с остальными заголовками HTTP. Как и другие заголовки, файлы cookie должны посылаться до какого-либо вывода работы сценария (это ограничение протокола). Поэтому требуется, чтобы обращение к функции было помещено до любого вывода, включая теги и любые символы разделители. Если вывод происходит до обращения к этой функции, то setcookie() не выполнится и вернет FALSE. Если setcookie() выполняется успешно, то возвращается TRUE. Это не указывает на то, что пользователь принял cookie.

Параметры setcookie() объясняются в следующей таблице.

Параметр

Описание

name

Имя cookie. Этот идентификатор хранится в глобальной переменной $_COOKIE и доступен в последующих сценариях

value

Значение cookie. Значение, связанное с идентификатором cookie. Хранится на компьютере пользователя, поэтому не должно содержать секретной информации

expiration

Время, когда истекает значение cookie или становится более недоступным. Это время можно задать с помощью функции time(). Файлы cookie, без заданного значения времени истечения, завершают свое существование при закрытии браузера

path

Указывает пути доступа на сервере, для которых cookie действителен или доступен. Прямая косая черта "/" говорит, что cookie доступен во всех папках

domain

Домен, в котором доступен cookie. Если домен не определен, по умолчанию используется хост, на котором создан cookie. Значения domain должны содержать в строке как минимум две точки ".", чтобы быть допустимыми

security

Указывает, будет ли cookie передаваться через HTTPS. Значение 1 означает, что cookie передается через защищенное соединение. Значение 0 обозначает стандартную передачу HTTP

Следующий пример демонстрирует, как cookie используется для сохранения имени пользователя посетителя. Вначале требуется ввести имя пользователя, чтобы получить доступ к ограниченному сайту. Когда имя пользователя будет создано, cookie, содержащий его, сохраняется на компьютере пользователя. Доступ в будущем возможен при извлечении cookie с компьютера пользователя.

<?php

if ($_REQUEST[auth] == "no") $msg = "Вы не являетесь пользователем. Зарегистрируйтесь.";

// Если пользователь щелкает на кнопке Login, создается cookie,

// содержащий его имя пользователя и IP-адрес

if ($_POST[submit] == "Login")

{

$cookie_name = "user";

$cookie_value = $_POST[uname];

$cookie_value = $cookie_value;

$cookie_expire = time() + 14400;

setcookie($cookie_name, $cookie_value, $cookie_expire, "/");

$formDisplay = "no";

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHMTL 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Страница WEB</title>

<style type="text/css">

body

{

font:10pt arial;

color:white;

}

div#form

{

background-color:gray;

border:solid 1px black;

padding:10px;

}

input

{

border:solid 2px black;

}

</style>

<?php if($formDisplay == "no") { ?>

<meta http-equiv='refresh' content='0;url=siteaccess.php?auth=yes'/>

<?php } ?>

</head>

<body>

<div id="form">

<h4 style="color:red">New User? Create User Name</h4>

<form action="setcookie.php" method="post">

<p>User Name:<br/><input type="text" name="uname" size="7"/></p>

<input type="submit" value="Login" name="submit"/>

</form>

<h4 style="color:red">Existing User?

<a style="color:white" href="siteaccess.php?auth=yes">Enter Site</a>

</h4>

</div>

<br/>

<br/>

<?php echo "<span style='color:red'>".$msg."</span>"; ?>

</body>

</html>

<?php

# siteaccess.php

#----------------

// Если пользователь щелкает на кнопке Login,

// создается cookie, содержащий его имя пользователя и IP-адрес

if ($_REQUEST[auth] == "yes" && $_REQUEST[user])

{

echo "Добро пожаловать ".$_COOKIE[user]." на сайт с ограниченным доступом.<br/>".

"Теперь на вашем жестком диске хранится cookie,<br/>".

"и вы можете обращаться к этому сайту без регистрации<br/>".

"при каждом обращении";

}

else header("Location:setcookie.php?auth=no");

?>

Доступ к файлам и папкам

Открытие файлов

PHP предоставляет доступ к файлам в операционных системах Windows и Unix для чтения, записи или добавления содержимого. Этот раздел описывает, как использовать PHP для открытия файлов в системах Windows.

PHP содержит функции fopen() и fclose() для работы с файлами. Обе функции определяются ниже.

fopen(имя_файла, режим)- функция используется для открытия файла. Для функции требуется задать имя файла и режим работы. Она возвращает указатель на файл, который содержит информацию о файле и используется в качестве ссылки.

fclose(указатель_ресурса) – функция используется для закрытия файла. Для функции требуется указатель файла, созданный при открытии файла с помощью функции fopen(). Возвращает TRUE при успешной работе или FALSE при отказе.

Имя файла является полным путем доступа к файлу, который требуется создать или открыть. Этот путь доступа может быть относительным путем доступа к файлу: "/Documents and Settings/Administrator/PHP/myfile.txt" или абсолютным путем доступа к файлу: "E:/MyFiles/PHP/myfile.txt". Для каждого определенного каталога необходимо иметь подходящие права NTFS для создания, модификации или удаления файлов.

Режим может быть одним из следующих.

Режимы, используемые в fopen()

Режим

Применение

r

Открывает существующий файл с целью чтения из него данных. Указатель файла помещается в начале файла

r+

Открывает существующий файл с целью чтения или записи данных. Указатель файла помещается в начале файла

w

Открывает файл для записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в начале файла и функция удаляет все существующее содержимое файла

w+

Открывает файл для чтения и записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в начале файла и функция удаляет все существующее содержимое файла

a

Открывает файл для записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в конце файла

a+

Открывает файл для чтения и записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в конце файла

Следующий пример показывает, как открыть файл для чтения:

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$newfile = fopen($filename, "w+");

//код для чтения или записи данных в файл располагается здесь

fclose($newfile);

?>

Первый шаг состоит в создании переменной для хранения всего пути доступа к файлу, который будет открыт:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Путь доступа к текстовому файлу myfile.txt хранится в переменной с именем filename. Затем создается указатель файла с именем $newfile и применяется с функцией fopen() для открытия файла, указанного в предыдущем разделе. Указатель файла является ссылочной переменной PHP, используемой для ссылки на только что открытый файл:

$newfile = fopen($filename, "w+");

Указатель файла будет использован позже для чтения и записи содержимого в открытый файл.

В некоторых ситуациях функция fopen() не сможет успешно открыть файл в результате неверного пути доступа к файлу, полномочий безопасности или других непредвиденных проблем. В связи с этим рекомендуется использовать специальную функцию PHP для аккуратной обработки таких ошибок. Эти функции можно применять в сочетании с оператором управления ошибками PHP "@" для завершения сценария, подавления создаваемых PHP сообщений об ошибках, и вывода более понятного пользователю сообщения. Функции управления ошибками PHP приведены ниже:

  1. exit(сообщение_об_ошибке) – завершает текущий сценарий и выводит сообщение об ошибке, передаваемое в функцию.

  2. die(сообщение_об_ошибке) – алиас функции exit().

Следующий сценарий демонстрирует использование функций управления ошибками:

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$newfile = @fopen($filename, "w+") or exit("Невозможно открыть или создать файл");

// код для чтения или записи данных в файл размещается здесь

fclose($newfile);

?>

Если файл невозможно открыть, функция exit() выводит сообщение " Невозможно открыть или создать файл" и сценарий завершается.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]