2015-11-04 7 views
1

Я разрабатываю проект с небольшой клиентской областью с каркасом Silex. Я хочу сохранить сессию в базе данных с помощью SessionServiceProvider и PdoSessionHandler, но когда я пытаюсь войти в тестовую учетную запись, сеанс написан в базе данных, но логин не выполнен правильно, и я получаю страницу входа в цикл. Кроме того, я получаю следующее сообщение об ошибке в журнал ошибокВход не работает в Silex с PostgreSQL

Uncaught exception 'PDOException' with message 'SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8" 

таблица сессий выглядит следующим образом (получил его от Silex documentation page):

CREATE TABLE sessions (
    sess_id VARCHAR(255) NOT NULL, 
    sess_value TEXT NOT NULL, 
    sess_time INTEGER NOT NULL, 
    PRIMARY KEY(sess_id) 
); 

Любой человек может помочь?

+0

ли вы создать таблицу в Postgres, используя для хранения UTF8 (на столе/столбца или всей базы данных)? –

+0

База данных определяется следующим образом: 'backoffice | qiuandei | UTF8 | ru_US.utf8 | ru_US.utf8 | ' – madelman

ответ

2

я оказался с той же ошибкой некоторое время назад, выглядит как кремнезем документация неверна для PostgreSQL, то sess_value поле должно быть поле с 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) 
); 
+1

Отличный !! Я изменил определение таблицы, а не работает! Большое спасибо!! – madelman

Смежные вопросы