очистка php файлы сессии

Некоторые подсказки: расстояние между узлами на одной глубине (например, 2 и 4 или 3 и 8 в вашем примере) является функцией глубины.

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

Таким образом, вам нужен способ, например, упорядочить ваши узлы в массивы строк по их глубине в порядке их самого левого.

Начиная с корневого узла, поиск по ширине будет посещать узлы в порядке глубины и самого левого.

Интервал между узлами может быть найден путем нахождения максимальной высоты дерева с использованием некоторой постоянной ширины для самых глубоких узлов и удвоения этой ширины для каждой меньшей глубины, так что ширина для любой глубины = (1 + maxdepth - currentdepth) * deepestwidth.

Это число дает напечатанную «горизонтальную ширину» каждого узла на любой конкретной глубине.

Левый узел горизонтально расположен в левой половине его родительской ширины, righ-узел в правой половине. Вы вставляете фиктивные прокладки для любого узла, у которого нет родителей; проще всего сделать это, чтобы все листья были на той же глубине, что и самый глубокий узел, а blank - как их значение. Очевидно, вам также придется компенсировать ширину значений, возможно, используя максимальную ширину глубины, по крайней мере такую ​​же широкую, как напечатанное (десятичное представление, предположительно) его наибольшего оцениваемого узла.

59
задан Jack 17 March 2009 в 14:02
поделиться

4 ответа

Для обработки сессии правильно смотрите на http://php.net/manual/en/session.configuration.php .

Там Вы найдете эти переменные:

  • сессия gc_probability
  • сессия gc_divisor
  • сессия gc_maxlifetime

Они управляют вероятностью сборщика "мусора" (GC) выполнения с каждым запросом страницы.

Вы могли установить тех, которые имеют ini_set () в начале Вашего сценария или .htaccess файла, таким образом, Вы получаете уверенность в некоторой степени, они будут удалены когда-то.

56
ответ дан T30 7 November 2019 в 14:42
поделиться

Debian/Ubuntu обрабатывает это с cronjob, определенным в/etc/cron.d/php5

# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm

, maxlifetime сценарий просто возвращает число минут, сессия должна быть поддержана путем проверки php.ini, это похоже на это

#!/bin/sh -e

max=1440

for ini in /etc/php5/*/php.ini; do
        cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
        [ -z "$cur" ] && cur=0
        [ "$cur" -gt "$max" ] && max=$cur
done

echo $(($max/60))

exit 0
35
ответ дан Paul Dixon 7 November 2019 в 14:42
поделиться

Используйте крон с находкой для удаления файлов, более старых, чем данный порог. Например, для удаления файлов, к которым не получали доступ, по крайней мере, в течение недели.

find .session/ -atime +7  -exec rm {} \;
5
ответ дан vartec 7 November 2019 в 14:42
поделиться

Мое лучшее предположение было бы то, что Вы находитесь на общем сервере, и файлы сессии смешаны вдоль всех пользователей, таким образом, Вы не можете, ни Вы должны, удалить их. То, что можно сделать, если Вы волнуетесь по поводу масштабирования и/или Вашей пользовательской конфиденциальности сессии, должно переместить сессии в базу данных.

Начинают писать, что Cookie к базе данных и у Вас есть длинный путь к масштабированию Вас приложение через несколько серверов, когда время является назначенным.

, Кроме которого я не волновался бы очень с этими 145 000 файлов.

2
ответ дан Frankie 7 November 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: