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

时间:2015-05-26 15:00:54

标签: php symfony session memcached share

我有一个基于Symfony框架的网站,我不得不添加一个直接在网络目录中启动的旧版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控制器中的会话:

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

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

$_SESSION['_sf2_attributes']

所以,最后使用这个配置,当我在symfony控制器中设置数据时,我没有在独立的php脚本中看到它,当我在php脚本中设置数据时,我没有在Symfony控制器中看到它。 / p>

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

2 个答案:

答案 0 :(得分:2)

你应该查看Bridge a legacy Application with Symfony Sessions 但总体而言,您可以通过以下方式进行配置:

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

答案 1 :(得分:0)

我终于解决了这个问题。

在parameters.yml文件中我放了:

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