Храню сессии в ФС. Для авторизованных пользователей - в одной папке, для неавторизованных - в другой. В папке неавторизованных демоном хожу и удаляю старые сессии. Вроде бы норм… Но решил я взглянуть в будущее: там директории, что с неавторизованными, что, особенно, с авторизованными сессиями, забиты в край! В этом я увидел много минусов: чтение директории усложнится, могу превысить лимит кол-ва файлов (я на shared-хостинге, так как на большее у меня нет ни денег, ни мозгов).
В общем, решил, что нужно искать другое хранилище. Почитал о способах хранения…
Какие выводы я сделал для себя? От худшего к лучшему, на мой взгляд:
1) Хранить дальше в ФС
Минусы: операция открытия и чтения файла, как я понял, слегка дороговата… Ограничение файлов, сложность чтения огроменного каталога.
Плюсы: лёгкая реализация и надёжность сохранности.
2) MySQL
Минусы: я вообще хочу минимизировать запросы к MySQL. В MySQL храню, в основном, большие данные, которые не редко меняются или данные, которые потом храню в сессии. Опять же, как я понял, множество запросов к мускулу и получение результа дольше, чем чтение файла (я не говорю, что соединение с мускулом дольше, чем открытие и чтение файла… я именно про запросы и получение результа). Соединение с сервером БД может по какой-либо причине оборваться.
Плюсы: лёгкая реализация, надёжность сохранения сессии (если считать, что соединение всегда установится)
3) Memcache/Redis
Ну об этих штуках я мало что знаю… Говоря про кэш, раньше я хранил кэш тупо в ФС. Вчера понял, что это не Найс и на кэш написал класс, который принимает данные кэша и класс сам определяет, по мере доступности, где его сохранить, в Memcached, SQLite или в ФС. С Memcached я ещё особо не разобрался. На своем хостинге я не нашел класс Memcache
, зато нашёл Memcached
, его нужно было принудительно врубить… От куда взять сервер - я вообще без понятий)) Написал localhost с портом 11211… хз, вроде работает. С Redis'ом вообще ещё даже не ознокамливался. Ну это на потом. С кэшем я разберусь… Хотел бы в ОП хранить его, и буду. Но вот сессии…
Минусы: я пока ещё не разобрался с Memcached и это минус (скорее минус мне, но всё же). Как я понял, Memcached может упасть в любой момент. И там уже нужно поднапречься, чтобы создавать дампы, цепочки северов и прочее. Жизнь и без этого сложна, не хочется ещё больше её усложнять. В Memcached я буду хранить кэш, который не критично потерять, не хотелось бы всё это смешивать в одной области.
Плюсы: всё довольно быстро (как я понял)
4) SQLite
Как по мне, в соотношении надёжный / быстрый / лёгкий - самый молодец!
Минусы: почти те же, что и у ФС за исключением размера каталога и кол-ва файлов. На счёт открытия и чтения файла я не вдавался в подробности, как там всё это происходит. Но, думаю, тоже так же, как обычное открытие и чтение. Здесь это не критично. Мне более важны размер каталога и кол-во файлов. Вот на счёт блокировки файла таблицы я ещё не совсем понял. Если 100 пользователей одновременно зайдут на сайт, что произойдёт? Они в очередь встанут или сломаются? За тайм-аут не выйдут?
Плюсы: легко, быстро…
Ещё читал про хранение на стороне клиента в куках, зашифровано, с ключом и т.д. но мне вообще это не подходит. Я не доверяю данным клиента, даже id сессии из Кук проверяю. Да и ограничение данных в куках. В общем, от этого сразу отказался.
Предпочел я SQLite. Какие камни меня ждут? И что посоветуете для хранения сессий, кроме ФС?