session_set_save_handler должна запускаться только один раз или с помощью неё можно определить несколько функций в течении одного сеанса? в документации об этом ни слова не нашел
т.е. запуская session_set_save_handler я отменяю предыдущие функции, а значит действия над пользовательскими данным из разных модулей надо слить в одну функцию
если ты хочешь направить, к примеру, всю работу с сессиями в базу. или тебя всё устраивает, но ты хочешь шифровать перед тем, как записывать в файлы. или ты вообще ненормальный и хочешь, чтобы у всех сессия была одна на всех. короче, если ты не доволен работой сессий
А почему кстати юзается работа с БД когда можно сделать виртуальный диск в памяти и получить все те же ускорения?
на вкус и цвет)) я предпочитаю использовать класс для работы с сессиями, который позволяет часть сессии шифровать. при этом открытая часть сессии работает значительно быстрее, хотя находится всё в одном файле. у баз якобы выше уровень защищенности. имхо, как раз это утверждение очень странное...
ну... у меня в "бронетанковой" каждый модуль имеет доступ к своей части сессии. очень удобно. что сам записал - то и твоё.
шифровать мне ничего не надо, модульность: просто у меня было два независимых модуля, один для зарегистрированных пользователей, другой для клиентов, они не пересекались, хотя клиент мог зайти под пользователем и тогда клиентские функции бы отменились (как сказал [vs]), но это случай оч редкий и я на нем не заморачивался. третий модуль хранил параметры всех пользователя в куках и от сессии не зависел, размер этих параметров стал превышать допустимые (сервер стал выдавать 400 Bad Request), и я перенаправил все данные в БД и хранится они будут теперь только на время сессии. теперь третий модуль пересекается с первыми двумя. раз session_set_save_handler переопределяет функции, то мне придется сделать четвертый модуль в котором объединить функции из трех модулей и в дальнейшем меняя/добавляя функциональность или модули дописывать изменения в этот четвертый модуль если бы session_set_save_handler поддерживала множественность ф-ций, т.е. каждый вызов session_set_save_handler добавлял бы функции в список, то модульность бы сохранилась, каждый модуль бы продолжал вызывать session_set_save_handler определять свои функции и все функции бы по очереди выполнялись
Ерунда получится: сначала с функциями клиента произойдет session_start и вызов open-функции и read-функции: в $_SESSION загрузится клиентская сессия. Потом произойдет переопределение, и $_SESSION с клиентскими данными (при завершении работы скрипта или вызове session_write_close()) запишется в БД пользовательской функцией. Или ты дважды session_start будешь делать? По-моему, это косяк в архитектуре и надо сделать иначе.
session_start можно сделать хоть 100 раз за время развертки. если сессия не разрушалась, то будет подцепляться одна и та же сессия. проверить это (старая/новая?) можно только если сравнить текущий sid с тем, который был раньше, потому как session_start всегда возвращает тру.
session_start вызывается в скрипте (и как сказал titch либо создает новую либо подключается к старой сессии), а этот скрипт подключает 2 из трех модулей и соответственно 2 раза вызовется session_set_save_handler (в модулях она) и соответственно работать будут те функции, которые будут определены последними мне собственно нужны только destroy и gc-функции для чистки устаревших данных и соответственно чистка будет выполняться только для одного из модулей поэтому получается: чтобы не было проблем session_set_save_handler должна быть определена 1 раз во всех исходниках сайта, что слегка мешает модульному программированию
PHP: <?php class sessions { private static $manager; public static function setManager($object) { self::$manager = $object; } public static function open($path, $name) { self::$manager->open($path, $name); } ....... назначаем handler один раз (функции - статические методы такого класса), потом просто меняем $manager по ходу скрипта.