Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мова РНР.Питання до заліку.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Закрытие сессии

После завершения работы с сессией сначала нужно разрегистрировать все переменные сессии, а затем вызвать функциюunset():

Синтаксис:

unset($_SESSION["username"]);

Пример простой сессии

Рассмотрим пример простой сессии, работающей с тремя страницами. При посещении пользователем первой страницы открывается сессия и регистрируется переменная $username. Соответствующий код реализации приведен в листинге:

<?

  session_start();

  $_SESSION['username'] = "maksim";

  echo 'Привет, '.$_SESSION['username']."<br>";

?>

  <a href="page2.php">На следующую страницу </a>

Результат работы этого сценария показан на рис:

После этого, пользователь maksim нажимает на ссылку и попадает на страницу page2.php, код которой приведен в листинге:

<?

  session_start();

  echo $_SESSION['username'].' , ты пришел на другую страницу этого сайта!';

  echo("<br>");

?>

  <a href="page3.php">На следующую страницу </a>

Результат работы этого скрипта показан на рис:

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

<?

  session_start();

  unset($_SESSION['username']); // разрегистрировали переменную

  echo 'Привет, '.$_SESSION['username'];

  /* теперь имя пользователя уже не выводится */

  session_destroy(); // разрушаем сессию

?>

Как видно из рисунка, после разрегистрации сеансовой переменной значение массива $_SESSION['username'] уже недоступно:

 

Идентификатор сессии – это переменная сессии, посредством которой происходит идентификация клиента (браузера). Этот уникальный идентификатор присваивается клиенту (браузеру) с той целью, чтобы он вернул ее при следующем запросе. По умолчанию в PHP идентификатор сессии обозначается как PHPSESSID.

Для каждого пользователя идентификатор сессии является уникальным и постоянным на весь сеанс работы. Если идентификатор передается неправильно, либо не передается совсем, это приведет к тому, что при каждом последующем обращении к сайту, PHP по умолчанию будет подставлять к ссылкам новый PHPSESSID.

В частности, поисковики, индексирующие сайты, воспринимают ссылку с измененной переменной PHPSESSID как новую и индексируют ее повторно, тем самым переполняя поисковую базу дубликатами страниц и увеличивая нагрузку на сервер.

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

Для того, что бы сервер определял каждый последующий запрос к сайту с одного и того же клиента как уже идентифицированный, а не новый, нужно выполнить ряд следующих условий. Идентификатор можно передать лишь двумя способами - в cookies или POST/GET запросом. Эти параметры можно задавать в файле php.ini, с помощью команды ini_set(), или файлах настройки веб-сервера, задавая следующие свойства:

  • session.use_cookies (значение 1- идентификатор передается в куках, 0- не передается)

  • session.use_trans_sid (значение 1- PHP передает идентификатор, добавляя его к URL и формам, 0- не передает)

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

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