Профессиональное программирование на PHP

Страница 356 из 591


Серверные сеансы 367

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

function write($id, $sess_data) {

$clean_data = mysql_escape_string ($se,ss_data) ; MySession::$dbh->execute("REPLACE INTO

sessions

(session_id, session_data, modtime) VALUES('$id', 1$clean_data1, now())");

}

Метод MySession: :destroy вызывается во время использования функции ses-sion_destroy (). MySession:: destroy используется для уничтожения отельного сеанса путем удаления его данных из базы. Несмотря на то что это не согласуется с встроенными обработчиками, может возникнуть необходимость уничтожить содержимое массива $_SESSION. Независимо от того, когда это будет сделано (во время выполнения функции destroy или после нее), но содержимое $_SESSION должно быть уничтожено, чтобы предотвратить автоматическую повторную регистрацию сеанса.

Ниже приведен код простой функции-деструктора:

function destroy($id) {

MySession::$dbh->execute("DELETE FROM sessions

WHERE session_id = '$id'");

$_SESSION = array();

}

Наконец, необходимо рассмотреть функцию уборки мусора, MySession: :gc. Функция принимает максимальный срок действия сеанса в секундах, который задается параметром session. gc_maxlif etime в файле php. ini. Как следует из материала предыдущих глав, создать развитую и эффективную систему уборки мусора непросто. Эффективность различных методов уборки мусора подробнее рассматривается в последующих разделах. Здесь же представлена несложная функция, которая просто удаляет любые сеансы, которые существуют больше времени, заданного аргументом $maxlifetime:

function gc($maxlifetime) { $ts = timeO - $maxlifetime,•

MySession::$dbh->execute("DELETE FROM sessions

WHERE modtime < from_unixtimestamp($ts)" ) ;

}

}

Уборка мусора

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

В файле php.ini установлена вероятность уборки мусора, session.gc_pro-bability. Когда вызывается функция session_start (), генерируется случайное число между 0 и session. gc_dividend (по умолчанию 100), и если это число мень-




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006