symfony2服务中的会话id为空



我使用symfony 2.5,并为monlog提供下一个服务。

<?php
namespace MegogoCoreBundle;
use SymfonyComponentHttpFoundationSessionSession;
class SessionRequestProcessor
{
    /**
     * @var SymfonyComponentHttpFoundationSessionSession
     */
    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;
    }
} 

service.yml

services:
    monolog.formatter.session_request:
        class: MonologFormatterLineFormatter
        arguments:
            - "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%%n"
    monolog.processor.session_request:
        class: MegogoCoreBundleSessionRequestProcessor
        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.

我也遇到过类似的问题。

我通过添加控制器解决了这个问题

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

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

$this->session->start();

当会话已经启动时,不要担心调用"start()"——它会检查并跳过(重新)启动它

Symfony的当前(2.6)版本没有可强制会话自动启动的config属性

官方文件称:

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

也许试试这个?

相关内容

  • 没有找到相关文章

最新更新