Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / web / example1 / Введение в PHP.doc
Скачиваний:
107
Добавлен:
18.05.2015
Размер:
3 Mб
Скачать

Сессии (Сеансы) Переменные сеанса

Сеанс – это цикл операций, обеспечивающих взаимо­действие между клиентом и сер­вером. Сессии TCP состоят из трех этапов: установки соединения, передачи данных, завер­шения соединения. При старте сессии посетитель сайта получает уникальный номер сессии вида "db17e8ab5892a486f60f208487152348". При этом номер сохраняется в cookies клиента PHPSESSID, а на сервере создается временный файл для хранения переменных сессии /php5/tmp/sess_ db17e8ab5892a486f60f208487152348.

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

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

<?

// файл 1.php

session_start();

$_SESSION['asd']='aaaaaa';

$_SESSION['name']['qwe']='тест';

?>

<a href="2.php">тест</a>

<?

// файл 2.php

session_start();

print $_SESSION['asd'];

print $_SESSION['name']['qwe'];

?>

В первом файле в сессии будут помещаться переменные, а во втором эти переменные будут получаться из сессии. Чтобы начать работать с сессиями, надо запустить их (session_start();). И после этого появляется доступ к глобальному массиву $_SESSION.

Если номер сессии нельзя передать в cookie браузера (например куки отключены), то номер сессии будет передаваться в ссылках, к которым будет автоматически добавляться. Например test.ru/index.php?PHPSESSID = db17e8ab5892a486f60f208487152348

Отметим, что многие поисковые системы не любят таких ссылок и занижают релевантность страниц. Во избежание этого можно попытаться запретить отображение SID в URL несколькими способами. Если у вас есть доступ к настройкам php.ini, можно отключить использование номера сессии в URL: session.use_trans_sid = 0. Не у всех есть доступ к настройкам php. В некоторых случаях избавиться от SID в ссылке можно используя полный путь в ссылке. То есть если у вас ссылка имеет вид <a href="test.php">тест</a>, то SID будет добавлен автоматически, если использовать полный путь <a href="http://site.ru/test.php">тест</a>, тогда SID не добавится.

Другой вариант, это вообще не стартовать сессии, если не нужно. В php есть константа SID, которая доступна в том случае, если номер сессии не получилось вставить в куки. Значение именно этой константы и добавляется в ссылку. Константа SID имеет строковое значение вида " PHPSESSID= db17e8ab5892a486f60f208487152348". Если номер сессии удалось вставить в куки, то эта константа будет пустой. Значит можно сделать проверку на присутствие значения в этой константе. Если присутствует что-то, то можно отключать сессии.

Если отключены куки и не получается избавиться от SID в ссылке с помощью использования полного адреса, можно сделать SID одинаковым, чтобы не размножать ссылки с уникальными номерами. Рассмотрим пример:

<?PHP

session_start();

if(SID)

{

session_destroy();

session_id('no');

session_start();

session_destroy();

}

?>

После старта сессий проверяем, есть ли что-то в SID. Если в SID есть что-то, значит номер сессии не установился в куки и при определенных настройках сервера добавится в ссылку. С помощью функции session_destroy() разрушим сессию, и удалим файл сессии.

Теперь создаем новый номер сессии, session_id('no');. Сейчас номер сессии будет просто "no". Чтобы новый номер сессии заменил предыдущий, нужно еще раз стартовать сессию(session_start();). И на всякий случай можно разрушить сессию, удалить файл этой новой сессии (session_destroy();). Теперь ко всем ссылкам будет добавляться PHPSESSID=no, но работать эти сессии не будут, будут работать только те сессии, которые смогут установить куки.

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

Третий способ предусматривает регистрацию переменной с помощью функции session_register(). Эта функция используется только если директива register_globals вклю­чена (по умолчанию выключена).

Система PHP имеет для поддержки сеансов $_SESSION[] – суперглобальный массив PHP, который содержит зарегистрирован­ные в данный момент переменные сеанса. Если директива register_globals отключена), только в массиве $_SESSION, можно запоминать сеансовые переменные. При использовании такого метода работы с сеансовыми переменными нет необхо­димости вызывать функцию session_register ().

Сеансы существуют, пока не выполняется одно из событий: закрывается окно браузера; завершается заданное на сервере максимальное время сеанса; используются та­кие функции PHP, как session_destroy(). Функция session_destroy() – разрушает все дан­ные, зарегистрированные для текущего сеанса. Эта функция не принимает параметры и уничтожает любые cookie-наборы и данные, ассоциируемые с активным сеансом.

Соседние файлы в папке example1