使用 PostgreSQL 登录在 Silex 中不起作用

Login not working in Silex with PostgreSQL

我正在使用 Silex 框架开发一个带有小型客户区的项目。我想使用 SessionServiceProviderPdoSessionHandler 将会话存储在数据库中,但是当我尝试使用测试帐户登录时,会话已写入数据库,但登录未正确完成,我得到了登录页面循环。另外我在错误日志中收到以下错误

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

会话 table 看起来像这样(从 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)
);

有人可以帮忙吗?

我前段时间发现自己遇到了同样的错误,看起来 silex 文档对于 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)
);