ФорумПрограммированиеPHP для идиотовРасширения PHP → Есть ли callback для session_destroy?

Есть ли callback для session_destroy?

  • Trej Gun

    Сообщения: 5304 Репутация: N Группа: в ухо

    Spritz 28 ноября 2009 г. 3:31, спустя 1 час 21 минуту 57 секунд

    в ГК можно поймать те которые отвалились по таймауту

    точнее тока они там и будут потому что все остальные были корректно закрыты
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 6:23, спустя 3 дня 2 часа 52 минуты


    в ГК можно поймать те которые отвалились по таймауту
    точнее тока они там и будут потому что все остальные были корректно закрыты
    ты пробовал словить? или это в теории?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 6:47, спустя 23 минуты 30 секунд

    попробуй ты. Меня этот вопрос тоже интересует.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 6:55, спустя 8 минут 12 секунд

    Абырвалг, ну можно повесить колбек и словить все мертвые сессии, а там уже на основании названий файлов их удалять и еще что-то делать
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 декабря 2009 г. 7:03, спустя 7 минут 36 секунд

    то есть их там словить можно?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 7:11, спустя 8 минут 31 секунду

    Абырвалг, да, колбек запустится в момент когда сработает gc, а там уже сам разруливай померли они или нет
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 7:32, спустя 20 минут 56 секунд

    все это в теории, на практике не удивлюсь что опять: на винде рабоатет не так или тп, в линуксе глючит, в фри удаляет сначала а потом запускает и ко всему этому прибавляется вероятность того что вообще не сработает ничто … ебанный пых, вечно с ним такая хуйн
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5304 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 7:35, спустя 2 минуты 53 секунды

    смотри кейс

    -сессия стартует
    -сессия наполняется
    -сессия лежит ничего не делает

    -стартует ГК
    -проверяет если последний апдейт был раньше чем NOW-TTL то удаляет сессию
    -profit
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 11:41, спустя 4 часа 5 минут 39 секунд

    По этому поводу есть вопросы, которые снимаются простым экспериментом, но делать его меня ломает, как видимо и всех.

    - как стартует ГК? когда, с чего?
    - я повесил калбэк на уничтожение, мой скрипт сдох через 0,05 секунды, ГК запустился через тыщу миллионов лет, кого он будет запускать?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 1 декабря 2009 г. 12:15, спустя 34 минуты 45 секунд

    1. Работая сегодня с gc, я сделал выводы, он запускается каждый раз при старте скрипта.
    Однако, можно настроить gc_lifetime и gc_probability для контролирования поведения gc

    2. То есть destroy? Или ты о чем?

    >ГК запустился через тыщу миллионов лет, кого он будет запускать?
    будет запускать то, что ты прописал как калбек и ему похую что ты там пытаешся делать
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 2 декабря 2009 г. 12:09, спустя 23 часа 53 минуты 41 секунду

    adw0rd, привиди, пожалуйста, пример, я нихуя не понимаю в этой еботе.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 2 декабря 2009 г. 14:12, спустя 2 часа 3 минуты 13 секунд

    завтра, на работе…
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 3 декабря 2009 г. 5:49, спустя 15 часов 36 минут 54 секунды

    У меня есть у каждого сателита логгер, который нужен для того, чтобы собирать логи и отдавать их центральному серверу.



    class PanjoStatist
    {
       public static $logger = NULL;
       
       public static function init()
       {
           if (self::$logger == NULL) {
               self::$logger = new PanjoStatist;
           }
       }
       
       private function __construct()
       {
    session_set_save_handler(
    array($this, "open"),
    array($this, "close"),
    array($this, "read"),
    array($this, "write"),
    array($this, "destroy"),
    array($this, "gc")
    );
       }

       /**
        * Добавление записи лога
        * @return boolean true
        */
       public function add()
       {
               // опущено
       }

       /**
        * Сохранения в лог-файл
        * @param string $session_id
        * @param string $data serialized arrays
        * @return boolean true
        */
       public function save ($session_id, $data)
       {
             // сюда передается имя сессии и данные из файла сессий
             // далее я криптую (RSA) тут данные сессии и записываю в файл лога
       }

       // куча кода опущено

       /**
        * Этот метод срабатывает когда запускается gc
        */
       public function gc($maxlifetime)
       {
           global $sess_save_path;
           $prefix = '/sess_';
           // перебираю файлы сессий в каталоге, выбирают от туда данные у которых время жизни истекло и удаляю их
           foreach (glob($sess_save_path.$prefix.'*') as $filename) {
               if (filemtime($filename) + $maxlifetime < time()) {
                   $session_id = substr($filename, strlen($sess_save_path.$prefix));
                   $this->save($session_id, file_get_contents($filename));
                   unlink($filename);
               }
           }
           return true;
       }
    }


    Стартует все это дело у меня так:

    if(Panjo::settings('PanjoStatist')) {
       PanjoStatist::init();
    }

    session_name(Panjo::settings('session_name'));
    session_set_cookie_params(Panjo::settings('session_timeout')); // ставим куку на 600 сек

    ini_set('session.gc_maxlifetime', Panjo::settings('session_timeout')); // каждые 600 сек
    ini_set('session.gc_probability', 100); // 100% gc сработает (в теории, а на практике замечал глюки)

    // делитель, типа если gc_probability = 100, а gc_divisor = 2, то gc стартанет на 50%
    // если gc_divisor = 3, то gc стартанет на 33% вероятности
    ini_set('session.gc_divisor', 1);

    session_start();
    Спустя 59 сек.
    Вот что я понял в результате тестов
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 декабря 2009 г. 13:50, спустя 19 дней 8 часов

    http://habrahabr.ru/blogs/php/78774/ вот еще пример
    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!