Чистим сессии в django сайте
In human-computer interaction, session management is the process of keeping track of a user’s activity across sessions of interaction with the computer system … Session management is particularly useful in a web browser where a user can save all open pages and settings and restore them at a later date. To help recover from a system or application crash, pages and settings can also be restored on next run. From: Wikepedia
За работу с сессиями в Django отвечает приложение django.contrib.sessions. По умолчанию оно хранит сессии в базе данных. Django не производит автоматическую чистку этой таблицы. Это значит, что если к вам на сайт зашёл Вася, то для него создалась сессия, Вася посмотрел и закрыл вашу страничку. Если вы ничего не делали специально с базой данных, то через год информация о сессии Васи по прежнему будет храниться в базе данных. Для Коли и других пользователей, браузеры которых поддерживают cookies, ситуация аналогична :-)
Будем чистить! Django предоставляет команду manage.py cleanup — она удаляет те сессии, время жизни которых слишком большое. Нужно всего лишь вызывать по крону эту команду. Если у вас много сайтов на вашем сервере, то есть смысл написать shell скрипт. У меня каждый сайт лежит в каталоге /web/site_name/, поэтому я сделал себе такой скрипт:
#!/bin/sh
WEB_ROOT="/web"
for dir in $(find $WEB_ROOT/* -maxdepth 0 -type d); do
cd $dir
if [ -f $dir/manage.py ]; then
echo "Cleaning up the $dir"
./manage.py cleanup
fi
done
Если вы никогда не чистили таблицу сессий, то команда может работать достаточно долго в первый раз. Если вам нужна скорость, просто выполните SQL DELETE запрос с условием на возраст сессии или обыкновенный TRUNCATE.