Сразу даю ссылку на пример: http://bike-forge.com/files/ Этот пример содержит в себе запоминание имени пользователя, и показывает как правильно закончить сессию. Все реализовано на fsession Методы которые содержит в себе fsession: $fsession->id() - возвращает текущий уникальный id пользователя $fsession->clean() - чистит сессию текущего пользователя $fsession->reset_id() - генерирует новый уникальный id для пользователя $fsession->set(name, value) - устанавливает переменную value с ключем name $fsession->get(name) - возвращает переменную с ключом name Связь со мной: jabber: obliged.act@xmpp.jp icq: 602224332 email: obliged.act@gmail.com
1. Нафига отдельный файл с проверкой на IP, если это можно хранить в файле сессии? Да и вообще проверки по md5 хватило бы. 2. Если уж очень хотите этот свой verify_keys - читате про flock, вы пока не умеете работать с файлами. 3. json_(en|de)code - это _совсем_ не то, что (de)serialize 4. В "get": if (empty($this->_data[$name]) ... - что бы это значило? Читайте описание empty 5. Чем это лучше встроенного механизма?
2. Зачем? Я забыл добавить флаг LOCK_EX, сейчас исправим. 4. Да, видимо спешил - isset. Остальные вопросы - это моя реализация идеи.
Если не трудно - дайте линк на топик, хочется посмотреть, может найду что-нибудь полезное. Архив обновлен, косяки поправлены.
Да кто подобного не делал. Я вот фреймворк начинал писать, последнее что там сделал - сессии. Там по интерфейсу клепается класс-менеджер PHP: <?php // Интерфейс менеджера сессий interface Spirit_Session_Manager { // синглтон public static function getInstance(); // установка значения public function set($key, $data, $id = null); // проверка существования значения public function check($key, $id = null); // получение значенич public function get($key, $id = null); // удаление значения public function del($key, $id = null); // проверка существования сессии и обновление public function touch($id); // очистка сессии public function clear($id = null); // удаление сессии public function remove($id = null); // удаление устаревших сессиий public function gc($expire); } потом в другом месте назначается PHP: <? if ($ini['sessions']['SpiritManagerAsDefault'] == 1) { $open = 'Spirit_Session::php_open'; $close = 'Spirit_Session::php_close'; $read = 'Spirit_Session::php_read'; $write = 'Spirit_Session::php_write'; $destroy = 'Spirit_Session::php_destroy'; $gc = 'Spirit_Session::php_gc'; session_set_save_handler($open, $close, $read, $write, $destroy, $gc); ini_set('session.gc_divisor',$ini['sessions']['GcDivisor']); ini_set('session.gc_maxlifetime',$ini['sessions']['Expire']*60); }?> и - вауля! - переносим сессии на управление своего класса. Эх, жаль никуда пока не пошло...(
Спасибо за идею, добавлю методы _get_verify_keys() _set_verify_keys() чтобы наследованием можно было заменить место хранение ключей.
Архив обновлен, теперь можно переписать 4 метода _get_verify_keys() _set_verify_keys() _get_id_data() _set_id_data() и завязать все куда-хотите (БД, FTP, и так далее..)
> Остальные вопросы - это моя реализация идеи. Так расскажите идею тогда. Реализацию то видно, а вот в чем идея - не ясно. Поясню: 1. md5 по IP которое вы сделали + наличие файла сессии = выполняет точно ту же функциональность, что и это хранилище. В чем суть дублирования информации? 3. Расскажите мне, как вы будете объекты хранить, вернее, восстанавливать их.