Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
php / Lab9.doc
Скачиваний:
38
Добавлен:
07.02.2016
Размер:
94.72 Кб
Скачать

2.3. Сериализация

Если вы посмотрите на файл сессии, то увиде нечто такое:

myarray|a:4524:{s:7324:"startup";i:98;s:4:"type";i:1;s:2:"ip";s:13:"1572342";s

:2:"tt";i:2;s:3:"b";i:12312;s:621:"max";i:2380;s:6:"min";i:-8334;s:10:"realmax

";i:1213126;s:10:"realmin";i:0;s:1:"kol";i:1;s:1:"n";i:15;s:9:"timestart";i:98

8387008;s:7:"timeend";i:9883218;s:4:"list";a:16:{i:0;s:7:"1002001";i:1;s:7:"10

02007";i:2;s:7:"1002010"; ............ и т.д.

Представьте, что у нас есть огромный массив сложной структуры, к примеру, $myarray. Любую переменную (сложный массив) с любыми символами (произвольные бинарные данные) очень легко запаковать в строку из букв и цифр. Для чего переводить массив в строку? Строку (просто переменную), да еще и текстовую, легко куда-нибудь записать. Например, на листочек бумаги. Или в базу данных. Или в файл сессии. Позже можно распаковать такую строку в оригинальную переменную и получить то, что было до упаковки. Данный метод (называется - сериализация) упаковки/распокавки переменных или объектов применяется не только в сессиях.PHPчтобы сохранить все данные пользователя запаковывает их и кладет как строку в файл сессии.

$myStr=serialize($myVar) - запаковать огромный массив или любую произвольную переменную $myVarв текстовую переменную $myStr.

$myVar=serialize($myStr) - распаковать (восстановить) данные из ранее запакованной переменной, хранящейся в $myStr, и записать результат распаковки (оригинальную переменную) в $myVar

Программиста может не волновать, как именно PHPхранит Ваши переменные. Вы всегда можете перейти от метода хранения сессий в файлах к хранению в базе данных или любых других местах, просто дописав нужный модуль по сохранению/извлечению сессий. Менять что-либо в программе не придется.

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

Мы установили, что необходимо передавать идентификатор сессии - строку из букв и цифр длиной 32 символа. Любую строку от скрипта к скрипту можно передавать следующими способами.

Способ 1: Cookies

Это самый популярный и работающий по умолчанию способ передачи идентификатора. Можно один раз поместить в cookies переменную и все остальные скрипты будут ее получать. Если у пользователя cookies включены, PHP сам поместит туда идентификатор и потом сам его от туда достанет. При этом в cookies создается переменная с известным именем (по умолчанию PHPSESSID) и значением идентификатора (например: ac4f4a45bdc893434c95dcaffb1c1811).

Позитив: cookies – это самый простой способ закрепить за посетителем какие-либо данные. Трудно стереть cookies или изменить.

Негатив: cookies могут быть выключены.

Способ 2: параметры

Например: http://php.spb.ru/test.php?PHPSESSID=ac4f4a45bdc893434c95dcaffb1c1811.

Если Вы будете дописывать все Ваши ссылки подобным образом, то все Ваши последующие скрипты получат идентификатор. PHP использует и данный метод по умолчанию (совмещая с cookies, если те выключены). Т.е. PHP сам применит либо cookies, либо способ 2. PHP сам после работы Вашей программы проанализирует ее страницу для браузера и заменит все ссылки так, чтобы дописать переменную PHPSESSID.

Позитив: 100% надежный способ. Легко передавать во всех ссылках номер сессии (это нагрузка, но она очень простая).

Негатив: любой пользователь может переделать номер сессии или удалить ее. Т.к. в принципе нет способа надежной привязки посетителя к номеру - беда небольшая. Злой сосед по компьютеру может украсть номер из URL (32 символа). Но если сделать URL подлиннее (test.php?_________....______&PHPSESSID=12345678), то сосед ничего не увидит. Строка "Адрес" в браузере не бесконечная :-))

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