chi*_*enz 3 postgresql session symfony
我试图将php会话从文件移动到数据库。之后:pdo_session_storage我设置了symfony,如下所示:
config.yml:
session:
handler_id: session.handler.pdo
Run Code Online (Sandbox Code Playgroud)
services.yml:
session.handler.pdo:
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
arguments:
- "pgsql:host=%database_host_access%;port=%database_port_access%;dbname=%database_name_access%"
- { db_username: %database_user_access%, db_password: %database_password_access% }
Run Code Online (Sandbox Code Playgroud)
可以正确看到数据库,并为每个会话在表中创建一行:sessions。
问题是:每次我重新加载页面时,会话属性都会丢失。似乎数据是从零开始写入的,而不是附加到现有属性中。
通过一些调试,我发现NativeSessionStorage->loadSession()装入的数据$_SESSION为空,因此SessionHandlerProxy->write()写入具有空属性的数据。
NativeSessionStorage :: loadSession():
protected function loadSession(array &$session = null)
{
if (null === $session) {
$session = &$_SESSION;
}
$bags = array_merge($this->bags, array($this->metadataBag));
foreach ($bags as $bag) {
$key = $bag->getStorageKey();
$session[$key] = isset($session[$key]) ? $session[$key] : array();
$bag->initialize($session[$key]);
}
$this->started = true;
$this->closed = false;
}
Run Code Online (Sandbox Code Playgroud)
哪里&$_SESSION;总是空的。
如果我mysql用作session.handler.pdo参数或让php通过文件管理会话,则不会出现此行为。
我找不到关于该主题的资源,我认为这不是一个小问题,有人提出了建议吗?
我正在使用Postgres版本9.4.1.0和Symfony版本2.6.5。
我发现了问题:PostgreSql 9.0版更改了默认hex格式的bytea输出,但Symfony处理了中的资源escape。
临时解决方案可能是: ALTER DATABASE dbname SET bytea_output = 'escape';
这是git / symfony问题:https : //github.com/symfony/symfony/issues/14569
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |