Безопасность должна быть проблемой. Помните, что все, что хранится на стороне клиента (например, файлы cookie, параметры формы POST, параметры GET и т. Д.), Можно изменить с помощью прокси-серверов браузера. Поэтому всегда проверяйте все, что возвращается через браузер. Вы также можете зашифровать значения в файлах cookie или сформировать параметры POST. Кроме того, как отметил Стив, куки-файлы обычно следует использовать только для небольших значений.
Метод, основанный на файлах по умолчанию, очень хорош, если вы не собираетесь работать на кластере серверов или если вы можете терпеть потерю пользовательских сессий, если сервер выходит из строя (им придется войдите в систему). Для подавляющего большинства приложений это вполне приемлемо. Вам необходимо настроить балансировщик нагрузки для «липких сессий», что означает, что данный пользователь привязан к одному серверу. Это может усложнить балансировку нагрузки, так как иногда вы обнаружите, что многие пользователи привязаны к одному серверу, а другой сервер находится в режиме ожидания.
Если вам требуется общее состояние сеанса в кластере, у вас есть пара основных опций. Если ваш трафик не является экстремальным, и вы можете справиться с небольшой задержкой, вы можете сохранить информацию о сеансе в базе данных. Пока ваша база данных работает, данные сеанса не будут потеряны. Если ваша база данных не работает, то данные сеанса, вероятно, меньше всего вас волнуют. Если ваше приложение имеет очень высокий трафик или невероятно критично для производительности, тогда лучше всего использовать распределенный кеш, такой как memcached. Однако это дополнительная «инфраструктура», которую вам придется поддерживать и отслеживать. Даже если memcached распространяется, это все еще дополнительная точка отказа, которую вы добавляете в среду своего приложения. Так что не принимайте это всерьез, если вам это действительно не нужно.
Короче говоря, я бы сказал, что подход к хранилищу файловых сессий по умолчанию, вероятно, вполне приемлем для 90 +% приложений.