3

我使用 symfony 2.5,并且我有下一个独白服务。

<?php

namespace Megogo\CoreBundle;

use Symfony\Component\HttpFoundation\Session\Session;

class SessionRequestProcessor
{
    /**
     * @var \Symfony\Component\HttpFoundation\Session\Session
     */
    protected $session;

    /**
     * @var
     */
    private $token;

    public function __construct( Session $session)
    {
        $this->session = $session;
    }

    public function processRecord(array $record)
    {

        if (null === $this->token) {
            try {
                $this->token = $this->session->getId();
            } catch (\RuntimeException $e) {
                $this->token = '????????';
            }

        }
        $record['extra']['token'] = $this->token;

        return $record;
    }
} 

服务.yml

services:
    monolog.formatter.session_request:
        class: Monolog\Formatter\LineFormatter
        arguments:
            - "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%%\n"

    monolog.processor.session_request:
        class: Megogo\CoreBundle\SessionRequestProcessor
        arguments:  ["@session"]
        tags:
            - { name: monolog.processor, method: processRecord }

我从官方文档中获取示例。添加会话/请求令牌

我有问题,$this->session->getId()返回空字符串。如果我添加 $session->start(); 所有作品。我可以获得会话ID。但这很奇怪,因为在我的其他服务中,如果没有这种解决方法,所有服务都可以正常工作。当我做app/console cache:clear我有错误Failed to start the session: already started by PHP.

4

2 回答 2

2

我有一个类似的问题。

我已经通过添加控制器解决了它

$this->get('session')->start();

在您的情况下,您可以在尝试获取会话 ID 之前简单地添加以下行

$this->session->start();

不要担心在会话已经开始时调用“start()”——它会检查并简单地跳过(重新)启动它。

当前(2.6)版本的 Symfony 没有config 属性会强制会话 auto_start

于 2015-04-23T11:37:28.300 回答
0

官方文档说:

Symfony 会话与 php.ini 指令不兼容session.auto_start = 1该指令应在 php.ini、webserver 指令或 .htaccess 中关闭。

也许试试这个?

于 2014-09-04T23:34:33.557 回答