Instalei um CMS, chamado Prestashop: ele roda em um domínio específico, e com uma configuração específica de VirtualHost no Apache, em um servidor com outras aplicações PHP (Wordpress).
Quando tento fazer login como usuário administrador, recebo o seguinte erro (este é o log de erros do Apache):
[Wed Jan 18 00:09:16.059190 2017] [:error] [pid 31253] [client xx.xx.xx.xx:63129] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Failed to start the session: already started by PHP.' in /opt/wp/apps/prestashop/app/cache/prod/classes.php:108\nStack trace:\n#0 /opt/wp/apps/prestashop/app/cache/prod/classes.php(483): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->start()\n#1 /opt/wp/apps/prestashop/vendor/symfony/symfony/src/Symfony/Component/Security/Csrf/TokenStorage/SessionTokenStorage.php(90): Symfony\Component\HttpFoundation\Session\Session->start()\n#2 /opt/wp/apps/prestashop/vendor/symfony/symfony/src/Symfony/Component/Security/Csrf/CsrfTokenManager.php(54): Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage->hasToken('ANONYMOUS_USER')\n#3 /opt/wp/apps/prestashop/app/cache/prod/classes.php(8196): Symfony\Component\Security\Csrf\CsrfTokenManager->getToken('ANONYMOUS_USER')\n#4 /opt/wp/apps/prestashop/classes/Link.php(722): PrestaShopBundle\Service\Routing\Router->generate('admin_product_c...')\n#5 /opt/wordpre in /opt/wp/apps/prestashop/app/bootstrap.php.cache on line 3216, referer: http://www.xxxxx.xx/adminXXX/index.php?controller=AdminLogin&token=181fa270d47386a8d523bdea6213932c&redirect=AdminDashboard'
O erro é recuperado por uma versão estável do Prestashop, então não acho que possa depender de um problema de código. Será que o WordPress primeiro abre uma sessão e depois o Symfony (Prestashop) encontra a sessão já aberta? O domínio principal é de fato servido pelo WP. Também tento definir um caminho específico para o Prestashop VirtualHost:https://stackoverflow.com/questions/18262878/how-to-prevent-php-sessions-being-shared-between- Different-Apache-vhosts Infelizmente não funciona.
O parâmetro auto_start da sessão PHP é definido como 0 no php.ini.
Não entendo como posso resolver esse problema. Pode depender de uma configuração Apache ou PHP?
Muito obrigado.
Responder1
Você tem alguns caracteres fora do seu PHP, antes do comando session_start. Provavelmente espaços após a tag de fechamento ?>
É por isso que as tags de fechamento não devem estar no final do arquivo, isso foi codificado no padrão PSR2.
Certifique-se de enviar todos os arquivos com configurações de FTP corretas e verifique se há alterações acidentais. Na pior das hipóteses, coloque var_dump(headers_sent().__FILE_d); em todos os arquivos incluídos antes da sua mensagem de erro.