Отмена регистрации сеансовых переменных

Существуют моменты (например, когда пользователь покидает сайт), когда сеансовые переменные нужно удалить. Это можно сделать, уничтожив весь сеанс или удалив только некоторые сеансовые переменные. Для удаления определенных переменных можно использовать оператор unset, удаляющий элемент из су пер глобального массива S_SESSION, или использовать PHP-функцию session_unregister О. Синтаксис функции session_unregister () имеет вид:
session_unregister(Sname)
Как и свой антипод, session_register (), функция session_unregister () принимает строку Sname, представляющую имя глобальной переменной, которую нужно удалить из сохраненных переменных сеанса. Эта функция возвращает true, если переменная была удалена успешно, или false, если переменная не существует.Постоянные данные, использующие сеансы и cookie-наборы
Глава 6 !_1
Уничтожение сеанса
Для уничтожения всех сеансовых переменных (а также и самого сеанса) служит функция session_destroy(). Эта функция не принимает параметры и уничтожает любые cookie-наборы и данные, ассоциируемые с активным сеансом.
Работа с сеансовыми переменными
Другая необходимость, возникающая при работе с сеансами — определить, были ли зарегистрированы сеансовые переменные. Это можно сделать с помощью оператора isset, позволяющего проверить существование соответствующего ключа в массиве
S_SESSION, или функции session_is_registered():
session_is_registered(Sname)
где Sname — строка, представляющая имя сеансовой переменной, которую нужно проверить. Эта функция возвращает true, если переменная была зарегистрирована, и false — если нет.
Для того чтобы реально продемонстрировать работу сеансов в РНР, сначала нужно создать ситуацию, в которой пользовательские данные должны быть сохранены во время запроса к серверу. Идеальным примером, удовлетворяющим таким требованиям, является пример с тележкой для покупок. Предположим, что вся функциональность тележки заключена в одном PHP-классе ShoppingCart. В этой ситуации для каждого покупателя создается единственный экземпляр тележки, который регистрируется как сеансовая переменная, сохраняемая в массиве S^SESSION. Для каждого последующего запроса экземпляр (и все его данные) пересоздаются РНР. Реализация такой системы показана в листинге 6.8.
Листинг 6.8. Пример с тележкой для покупок на РНР_
Файл ShoppingCart.class.php

class ShoppingCart ( private Scart;
function _construct 0 {
Sthis->cart = arrayO;
}
public function addltem($id, Sname, Scost) | foreach($this->cart as $key=>Sitems) ( if(Sitemst’id’] — Sid) {
$this->cart[Skey]['quantity']++; return;
}
I
Sthis->cart [] - arrayCid’ => Sid,
‘name’ => Sname, ‘cost’ => Scost, ‘quantity’ => 1);
I
public function delltem(Sid) {
foreach (Sthis->cart as Skey => Sitems) {if ($items['id'] == $id) {
if ($items['quantity* ] > 1) |
Sthis->cart[Skey]['quantity'] ) else f
unset($this->cart[Skey]) ;
)
return true;
}
}
return false;
1
public function getCart!) ( return Sthis->cart;
}
public function clearCartf) { $this->cart = array();
I
I

Файл Listing6__8 .php

require_once("ShoppingCart.class.php"); session_start ();
if(!isset(S_SESSI0N['cart']) || !is_object($_SESSION['cart'])) I S_SESSION['cart'] = new ShoppingCart!);
/* Добавить книгу в тележку (элемент #43 стоимостью $49.95) */ $_SESSI0N['cart']->addltem(43, “Book: PHP Unleashed”, 49.95);
I

Несмотря на то что РНР не имеет проблем с использованием экземпляров объектов в качестве сеансовых переменных в отличие от любых других типов данных в РНР, для объектов, пересоздаваемых внутри сеанса, в РНР должен быть определен начальный класс. Это означает, что определение класса ShoppingCart должно быть включено в сценарий для переменной $_SESSION[ 'cart' ], чтобы она могла быть корректно пересозданной.

Tags: , ,

Related posts


Leave a Reply


Нужны покупатели : плинтус цена. Плинтуса для пола.