Я разрабатываю проект с небольшой клиентской областью с каркасом Silex. Я хочу, чтобы сохранить сессию в базе данных с помощью SessionServiceProvider
и PdoSessionHandler
, но когда я пытаюсь войти в систему с помощью теста учетной записи сеанса записывается в базу данных, но Логин не будет сделано правильно, и я получаю страницу входа в петлю. Также я получаю следующую ошибку в журнале ошибок
Uncaught exception 'PDOException' with message 'SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8"
Таблица сеансов выглядит так (получена с страницы документации Silex):
CREATE TABLE sessions (
sess_id VARCHAR(255) NOT NULL,
sess_value TEXT NOT NULL,
sess_time INTEGER NOT NULL,
PRIMARY KEY(sess_id)
);
Кто-нибудь может помочь?
Я обнаружил, что с той же ошибкой некоторое время назад, похоже, что документация silex неверна для PostgreSQL, поле sess_value
должно быть BYTEA
типа BYTEA
потому что данные сеанса могут содержать символы, которые не принимаются в UTF-8, как символ NULL 0x00,
Кроме того, поскольку Silex использует компоненты Symfony2 для хранения сеанса в базе данных, необходимо добавить другое поле sess_lifetime, которое будет содержать время жизни сеанса базы данных.
Поэтому определение должно быть:
CREATE TABLE sessions (
sess_id VARCHAR(255) NOT NULL,
sess_value BYTEA NOT NULL,
sess_time INTEGER NOT NULL,
sess_lifetime INTEGER NOT NULL,
PRIMARY KEY(sess_id)
);
backoffice | qiuandei | UTF8 | en_US.utf8 | en_US.utf8 |