0

我按照https://symfony.com/doc/master/session/proxy_examples.html中的说明进行操作,

我更新了我的 framework.yaml

framework:
    secret: '%env(APP_SECRET)%'
    #default_locale: en
    #csrf_protection: ~
    #http_method_override: true

# uncomment this entire section to enable sessions
session:
    # With this config, PHP's native session handling is used
    handler_id: App\Session\CookieEncryptedSession

#esi: ~
#fragments: ~
php_errors:
    log: true

我还创建了自己的类:

<?php
namespace App\Session;

use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy;

class CookieEncryptedSession extends SessionHandlerProxy
{
  private $key;

  public function __construct(\SessionHandlerInterface $handler, Key $key)
  {
    $this->key = $key;

    parent::__construct($handler);
  }

  public function read($id)
  {
    $data = parent::read($id);

    return Crypto::decrypt($data, $this->key);
  }

  public function write($id, $data)
  {
    $data = Crypto::encrypt($data, $this->key);

    return parent::write($id, $data);
  }
}

当我尝试使用控制台运行服务器时,出现此错误:

In CheckCircularReferencesPass.php line 67:

  Circular reference detected for service "App\Session\CookieEncryptedSession  
  ", path: "App\Session\CookieEncryptedSession -> App\Session\CookieEncrypted  
  Session".     

知道错误在哪里吗?

谢谢

奥斯卡

4

1 回答 1

0

自动装配试图将服务注入到自身,因为服务实现了构造函数所需的接口。CookieEncryptedSession通过以下方式实现SessionHandlerInterface

class SessionHandlerProxy extends AbstractProxy implements \SessionHandlerInterface

在您的服务中设置服务:手动设置 CookieEncryptedSession,以便您可以选择所需的 SessionHandlerInterface 服务。

  • NativeSessionHandler
  • NativeFileSessionHandler
  • DbalSessionHandler
  • ETC
于 2017-12-24T01:20:24.727 回答