2015-11-04 125 views
1

我正在开发一个带有Silex框架的小型客户区项目。我想使用SessionServiceProviderPdoSessionHandler将会话存储在数据库中,但是当我尝试使用测试帐户登录时,会话被写入数据库,但登录未正确完成,我在循环中获取登录页面。此外,我我得到错误以下错误日志登录不能在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 | en_US.utf8 | en_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