
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), то сосед ничего не увидит. Строка "Адрес" в браузере не бесконечная :-))