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

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

  • Trej Gun

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    смотри кейс

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Spritz 3 декабря 2009 г. 16: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 23 декабря 2009 г. 0:50, спустя 19 дней 8 часов

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

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