我有一个建立在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