Использование MongoDB для хранения сессий в Symfony 2.7

  • 1,511
  • 2
  • 0
  • 0
  • 2 года назад

По умолчанию Symfony сохраняет данные сессии через стандартный обработчик сессий, который использует файловую систему сервера. Это нормальное решение в большинстве случаев, но если вам нужны приложения для работы на нескольких веб-серверах и которые используют балансировщик нагрузки, то стандартный обработчик не подойдёт.

Есть еще несколько вариантов http://symfony.com/doc/current/components/http_foundation/session_configuration.html, но я расскажу про хранение сессий в базе данных MongoDB. Этот сниппет предполагает, что вы уже настроили сервер под управлением MongoDB. Если вы этого не сделали, то можете прочитать как это сделать.

Чтобы включить хранение сессий в MongoDB , вам нужно отредактировать ваш конфигурационный файл app/config/config.yml.

Первое, добавьте следующие настройки в раздел parameters:

parameters:
    mongo.session.options:
        database: session_db # this can be whatever you want
        collection: session # this can be whatever you want
    mongodb_host: 1.2.3.4 # your MongoDB server's IP

Затем, добавьте настройки в разделеframework:

framework:
    session:
        handler_id:  session.handler.mongo
        cookie_lifetime: 2592000 # необязательно, я установил на 30 дней
        gc_maxlifetime: 2592000 # необязательно, я установил на 30 дней

Наконец, добавьте настройки в раздел services:

services:
    mongo_client:
        class: MongoClient
        arguments: [mongodb://%mongodb_host%:27017]
    session.handler.mongo:
        class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler
        arguments: [@mongo_client, %mongo.session.options%]

Мой сервер MongoDB настроен на прослушивание только внутренней сети, поэтому я не использую имя пользователя и пароль. Однако, если вам нужно это сделать, вам следует просто добавить эту информацию в конфигурацию сервисаmongo_client.

Комментарии

0