Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony:警告:会话_start():无法解码会话对象。会话已被破坏_Php_Symfony_Session - Fatal编程技术网

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