Анимация
JavaScript
|
Главная Библионтека ( Замечание После вызова функции session unregister() глобальная переменная, которая была "аннулирована", не уничтожается, а сохраняет свое значение. void session unset() Функция session unset(), в отличие от session unregister(), не только отменяет регистрацию переменных (кстати говоря, всех переменных сессии, а не какой-то одной), но и уничтожает глобальные переменные, которые были зарегистрированы в сессии. string session save path([string $path]) Эта функция возвращает имя каталога, в котором будут помещаться файлы - временные хранилища данных сессии. В случае, если указан параметр, как обычно, активное имя каталога будет переустановлено на $path. При этом функция вернет предыдущий каталог. К сожалению, функции, которая бы возвращала список всех зарегистрированных в сессии переменных, почему-то нет. Во всяком случае, в PHP версии 4.0.3. Установка обработчиков сессии До сих пор мы с вами пользовались стандартными обработчиками сессии, которые PHP использовал каждый раз, когда нужно было сохранить или загрузить данные из временного хранилища. Возможно, они вас не устроят - например, вы захотите хра- Мы можем также создать сессию с угодным нам идентификатором, при этом автоматически установив его в Cookies пользователя. Но это - не лучшее решение, - предпочтительнее переложить всю "грязную работу" на PHP. Другие функции Здесь мы для полноты картины рассмотрим функции для работы с сессиями, которые применяются гораздо реже, чем уже описанные. bool session is registered(string $name) Функция session is registered() возвращает значение true, если переменная с именем $name была зарегистрирована в сессии, иначе возвращается false. bool session unregister(struing $name) Эта функция отменяет регистрацию для переменной с именем $name для текущей сессии. Иными словами, при завершении сценария все будет выглядеть так, словно переменная с именем $name и не была никогда зарегистрирована. Возвращает true, если все прошло успешно, и false - в противном случае. нить переменные сессии в базе данных или еще где-то. В этом случае достаточно будет переопределить обработчики своими собственными функциями, и вот как оно делается. Обзор обработчиков Всего существует 6 функций, связанных с сессиями, которые PHP вызывает в тот или иной момент работы механизма обработки сессий. Им передаются различные параметры, необходимые для работы. Сейчас я перечислю все эти функции вместе с их описаниями. bool handler open(string $save path, string $session name) Функция вызывается, когда вызывается session start() . Обработчик должен взять на себя всю работу, связанную с открытием базы данных для группы сессий с именем $session name. В параметре $save path передается то, что было указано при вызове session save path() или же путь к файлам-хранилищам данных сессий по умолчанию. Возможно, если вы используете базу данных, этот параметр будет бесполезным. bool handler close() Этот обработчик вызывается, когда данные сессии уже записаны во временное хранилище и его нужно закрыть. string handler read(string $sid) Вызов обработчика происходит, когда нужно прочитать данные сессии с идентификатором $sid из временного хранилища. Функция должна возвращать данные сессии в специальном формате, который выглядит так: имя1=значение1;имя2=значение2;имя3=значение3;...; Здесь имяы задает имя очередной переменной, зарегистрированной в сессии, а значением - результат вызова функции Serialize() для значения этой переменной. Например, запись может иметь следующий вид: fooi:1;counti:10; Она говорит о том, что из временного хранилища были прочитаны две целые переменные, первая из которых равна 1, а вторая - 10. string handler write(string $sid, string $data) Этот обработчик предназначен для записи данных сессии с идентификатором $sid во временное хранилище - например, открытое ранее обработчиком handler open() . Параметр $data задается в точно таком же формате, который был описан выше. Фактически, чаще всего действия этой функции сводятся к записи в базу данных строки $data без каких-либо ее изменений. bool handler destroy(string $sid) ( Замечание На самом деле обработчик handler gc() вызывается не при каждом запуске сценария, а только изредка. Когда именно - определяется конфигурационным параметром session.gc probability. А именно, им задается (в процентах), какова вероятность того, что при очередном запуске сценария будет выбран обработчик "чистки мусора". Сделано это для улучшения производительности сервера, потому что обычно сборка мусора - довольно ресурсоемкая задача, особенно если сессий много. Регистрация обработчиков Вы, наверное, обратили внимание, что при описании обработчиков я указывал их имена с префиксом handler. На самом деле, это совсем не является обязательным. Даже наоборот - вы можете давать такие имена своим обработчикам, какие только захотите. Но возникает вопрос: как же тогда PHP их найдет? Вот для этого и существует функция регистрации обработчиков, которая говорит интерпретатору, какую функцию он должен вызывать при наступлении того или иного события. void session set save handler($open,$close,$read,$write,$destroy,$gc) Эта функция регистрирует подпрограммы, имена которых переданы в ее параметрах, как обработчики текущей сессии. Параметр $open содержит имя функции, которая будет вызвана при инициализации сессии, а $close - функции, вызываемой при ее закрытии. В $read и $write нужно указать имена обработчиков, соответственно, для чтения и записи во временное хранилище. Функция с именем, заданным в Обработчик вызывается, когда сессия с идентификатором $sid должна быть уничтожена. bool handler gc(int $maxlifetime) Данный обработчик - особенный. Он вызывается каждый раз при завершении работы сценария. Если пользователь окончательно "покинул" сервер, значит, данные сессии во временном хранилище можно уничтожить. Этим и должна заниматься функция handler gc() . Ей передается в параметрах то время (в секундах), по прошествии которого PHP принимает решение о необходимости "почистить перышки", или "собрать мусор" (garbage collection) - т. е., это максимальное время существования сессии. Как же должна работать рассматриваемая функция? Очень просто. Например, если мы храним данные сессии в базе данных, мы просто должны удалить из нее все записи, доступ к которым не осуществлялся более, чем $maxlifetime секунд. Таким образом, "застарелые" временные хранилища будут иногда очищаться. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 [ 116 ] 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |