Для моего проекта Symfony2 я использую хранилище сеансов в базе данных.
Итак, я настраиваю свой config.yml следующим образом:
framework: session: handler_id: session.handler.pdo parameters: pdo.db_options: db_table: session db_id_col: session_id db_data_col: session_value db_time_col: session_time services: pdo: class: PDO arguments: - "pgsql:host=%database_host%;dbname=%database_name%" - "%database_user%" - "%database_password%" calls: - [setAttribute, [3, 2]] session.handler.pdo: class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler arguments: ["@pdo", "%pdo.db_options%"]
Все в порядке, когда я вхожу в систему, запись создается в моей базе данных, и сеансы работают нормально.
Но как я могу определить время жизни моего сеанса, когда он находится в базе данных? Почему у меня в моей таблице сеансов много строк (+50), если у меня только 4 участника в моем приложении?
Как я могу настроить это? Мне просто нужен один сеанс при входе в систему.
Вы можете уменьшить количество строк в таблице сеансов, если чаще всего запускать сборщик мусора.
http://www.php.net/manual/en/session.configuration.php#ini.session.gc-probability
В файле php.ini
session.gc_probability = 1
session.gc_divisor = 1
session.gc_maxlifetime = 36000
Эти настройки будут запускать сборщик мусора со 100% -ной вероятностью, который не рекомендуется для производства, но вы должны иметь возможность проверить его работу и настроить настройки по мере необходимости.
Я думаю, что количество строк не продиктовано временем жизни сеанса, по крайней мере, не полностью.
Основной причиной стольких рядов является защита от захвата сеанса. Таким образом, если вы закроете браузер и вернетесь на свой веб-сайт, сессия не будет восприниматься как должное, а будет восстановлена .
Используете ли вы FOSUserBundle
для аутентификации? Я точно знаю, что он поддерживает настройку защиты захвата сеанса …
РЕДАКТИРОВАТЬ:
chrsva
упомянул его здесь: как работает фиксация сеанса Symfony2?