За последние 24 часа нас посетили 18099 программистов и 1676 роботов. Сейчас ищут 1055 программистов ...

fsession - самописные сессии PHP

Тема в разделе "Решения, алгоритмы", создана пользователем obliged.act, 1 фев 2011.

  1. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Сразу даю ссылку на пример: 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

    Связь со мной:
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    1. Нафига отдельный файл с проверкой на IP, если это можно хранить в файле сессии? Да и вообще проверки по md5 хватило бы.
    2. Если уж очень хотите этот свой verify_keys - читате про flock, вы пока не умеете работать с файлами.
    3. json_(en|de)code - это _совсем_ не то, что (de)serialize
    4. В "get": if (empty($this->_data[$name]) ... - что бы это значило? Читайте описание empty
    5. Чем это лучше встроенного механизма?
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Если мне память не изменяет, то Elkaz делал что-то подобное, я в том топике даже засветился.
     
  4. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    2. Зачем? Я забыл добавить флаг LOCK_EX, сейчас исправим.
    4. Да, видимо спешил - isset.

    Остальные вопросы - это моя реализация идеи.
     
  5. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Если не трудно - дайте линк на топик, хочется посмотреть, может найду что-нибудь полезное.
    Архив обновлен, косяки поправлены.
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Да кто подобного не делал.
    Я вот фреймворк начинал писать, последнее что там сделал - сессии. Там по интерфейсу клепается класс-менеджер
    PHP:
    1. <?php
    2. // Интерфейс менеджера сессий
    3. interface Spirit_Session_Manager
    4. {
    5.     // синглтон
    6.     public static function getInstance();
    7.     // установка значения
    8.     public function set($key, $data, $id = null);
    9.     // проверка существования значения
    10.     public function check($key, $id = null);
    11.     // получение значенич
    12.     public function get($key, $id = null);
    13.     // удаление значения
    14.     public function del($key, $id = null);
    15.     // проверка существования сессии и обновление
    16.     public function touch($id);
    17.     // очистка сессии
    18.     public function clear($id = null);
    19.     // удаление сессии
    20.     public function remove($id = null);
    21.     // удаление устаревших сессиий
    22.     public function gc($expire);
    23. }
    потом в другом месте назначается
    PHP:
    1. <?
    2.             if ($ini['sessions']['SpiritManagerAsDefault'] == 1) {
    3.                 $open = 'Spirit_Session::php_open';
    4.                 $close = 'Spirit_Session::php_close';
    5.                 $read = 'Spirit_Session::php_read';
    6.                 $write = 'Spirit_Session::php_write';
    7.                 $destroy = 'Spirit_Session::php_destroy';
    8.                 $gc = 'Spirit_Session::php_gc';
    9.                 session_set_save_handler($open, $close, $read, $write, $destroy, $gc);
    10.                 ini_set('session.gc_divisor',$ini['sessions']['GcDivisor']);
    11.                 ini_set('session.gc_maxlifetime',$ini['sessions']['Expire']*60);
    12.             }?>
    13.  
    и - вауля! - переносим сессии на управление своего класса.
    Эх, жаль никуда пока не пошло...(
     
  7. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Спасибо за идею, добавлю методы _get_verify_keys() _set_verify_keys() чтобы наследованием можно было заменить место хранение ключей.
     
  8. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Архив обновлен, теперь можно переписать 4 метода _get_verify_keys() _set_verify_keys() _get_id_data() _set_id_data() и завязать все куда-хотите (БД, FTP, и так далее..)
     
  9. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    > Остальные вопросы - это моя реализация идеи.
    Так расскажите идею тогда. Реализацию то видно, а вот в чем идея - не ясно. Поясню:

    1. md5 по IP которое вы сделали + наличие файла сессии = выполняет точно ту же функциональность, что и это хранилище. В чем суть дублирования информации?

    3. Расскажите мне, как вы будете объекты хранить, вернее, восстанавливать их.
     
  10. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
  11. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ответ неверный, подумайте еще, пожалуйста.
     
  12. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Это делало 95% программистов.
     
  13. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    надо запомнить аську, чтобы ненароком не связаться...
     
  14. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Я вам что-то плохое сделал?

    Этот пример будет полезен новичкам.
     
  15. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    obliged.act
    та всё нормально... а новичкам будет полезен ман и хорошая книжка
     
  16. obliged.act

    obliged.act Активный пользователь

    С нами с:
    1 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Согласен.

    А тем временем вышла v1.7 stable.