如何在Symfony控制器和经典的独立php脚本之间共享会话数据,其中会话在memcache中管理


How to share sessions data between Symfony controllers and classic stand alone php script where sessions are managed in memcache?

我有一个建立在Symfony框架上的网站,我不得不添加一个直接在web目录下启动的遗留php脚本。

我还必须在Symfony框架控制器和独立php脚本之间共享会话数据。

我的服务器和Symfony框架上的会话被配置为在memcached服务器(127.0.0.1 11211)。

这里是我的Symfony配置文件:

parameters.yml

session_memcached_host: 127.0.0.1
session_memcached_port: 11211
session_memcached_prefix: 'BPY_'
session_memcached_expire: 3600

config.yml

imports:
    - { resource: session.yml }
    ...
    session:
        handler_id: session.handler.memcached

session.yml

services:
    session.memcached:
        class: Memcache
        arguments:
            persistent_id: %session_memcached_prefix%
        calls:
            - [ addServer, [ %session_memcached_host%, %session_memcached_port% ]]
    session.handler.memcached:
       class: Symfony'Component'HttpFoundation'Session'Storage'Handler'MemcacheSessionHandler
       arguments: [@session.memcached, { prefix: %session_memcached_prefix%, expiretime: %session_memcached_expire% }]

Symfony控制器中的Session使用:

$request->getSession->get('key');
$request->getSession->set('key', $value);

在独立的旧php脚本中,我使用全局会话数组来设置和获取数据。从理论上讲,为了允许Symfony和我的脚本共享数据,我设置和获取数据:

$_SESSION['_sf2_attributes']

所以,最后有了这个配置,当我在symfony控制器中设置数据时,我不会在独立的php脚本中看到它,当我在php脚本中设置数据时,我不会在symfony控制器中看到它。

我的配置或代码有什么问题?

您应该使用Symfony Sessions检查桥接遗留应用程序但总的来说,你可以用以下方式配置它:

framework:
  session:
    storage_id: session.storage.php_bridge
    handler_id: ~

我终于解决了这个问题。

在参数中。我放了:

session_memcached_prefix : ''

代替:

session_memcached_prefix : 'BPY_'

和两个环境可以共享会话数据

在Symfony控制器中我仍然使用

$request->getSession->get('key');
$request->getSession->set('key', $value);

在独立的php脚本中,我使用set和get数组中的数据:

$_SESSION['_sf2_attributes']

$_SESSION['_sf2_attributes']['key'] = $value