Php Symfony:警告:会话_start():无法解码会话对象。会话已被破坏
当我尝试使用Php Symfony:警告:会话_start():无法解码会话对象。会话已被破坏,php,symfony,session,Php,Symfony,Session,当我尝试使用\u switch\u user切换用户(模拟)时,Symfony给了我一个错误。它可能是在更改会话表名称后开始发生的。其他一切工作正常(设置并从会话中获取数据,无需模拟) 警告:会话_start():无法解码会话对象。会话已被破坏 日志中的精确错误 [2020-05-21 11:28:37]php.WARNING:WARNING:session_start():无法解码会话对象。会话已被销毁{“异常”:“[object](ErrorException(代码:0):警告:会话_sta
\u switch\u user
切换用户(模拟)时,Symfony给了我一个错误。它可能是在更改会话表名称后开始发生的。其他一切工作正常(设置并从会话中获取数据,无需模拟)
警告:会话_start():无法解码会话对象。会话已被破坏
日志中的精确错误
[2020-05-21 11:28:37]php.WARNING:WARNING:session_start():无法解码会话对象。会话已被销毁{“异常”:“[object](ErrorException(代码:0):警告:会话_start():无法解码会话对象。会话已在/app/my_app/vendor/symfony/http foundation/Session/Storage/NativeSessionStorage.php:151)”处被销毁[]
触发错误的精确行(\src\EventListener\MyListener.php
)
我的会话处理程序配置(config\services.yml
)
我的会话配置(config\packages\framework.yml
)
我正在使用
- Symfony 4.4.2
- PHP7.2
- “friendsofsymfony/用户包”:“2.1.2”
- 我想我今天遇到了和你一样的问题。我正在使用Symfony 5,但Symfony 4也是如此。问题是因为我的
User
有一个manytomy
关系,在某些情况下,带有所有子实体的完整对象被序列化并存储在会话中。在PdoSessionHandler
上,数据存储在BLOB
字段中,该字段限制为64Kb,我的序列化对象的大小超过100Kb
验证步骤
当您的页面在开发模式下崩溃时,它会在您发布文章后重定向。进入左下角的调试栏,在那里写入500
,然后打开菜单。您应该看到:从POST@route(profile)重定向profile是一个链接,请单击它。在探查器中,继续请求/响应**会话**。在会话属性中,您应该会看到一个以\u security\u
和防火墙名称开头的密钥(我的是admin
,所以是\u security\u admin
)。在那里你应该看到存储的数据,如果超过64K,就是这样
修复步骤
您必须在您的用户实体中实现可序列化的
接口,如下所述:(这也适用于SF 5)。这将使序列化对象更轻
小心点
更改序列化可能会影响站点中的其他功能,因此请小心副作用。还有一个问题,因为我有一个自定义的getUsername()
,这个方法用于用户验证,所以请注意,您的自定义方法可能会对用户验证产生影响 那救了我!!谢谢
public function onKernelRequest(RequestEvent $event) {
$request = $event->getRequest();
$request->getSession()->set('hash', $_ENV['HASH']);
}
Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler:
public: false
arguments:
- 'mysql:host=%env(DATABASE_HOST)%;dbname=%env(DATABASE_NAME)%'
- { db_table: 'my_sessions', db_username: '%env(DATABASE_USER)%', db_password: '%env(DATABASE_PASSWORD)%', lock_mode: 0 }
session:
handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
cookie_samesite: 'none'
cookie_secure: true
cookie_httponly: true
gc_probability: 0