我有一个基于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>
我的配置或代码有什么问题?
答案 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