感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
有时,把Symfony整合到遗产级程序中是必要的,但你难以根据需要从根本上控制代码。
如同在很多地方提到的,Symfony Sessions的设计理念是“取代PHP的原生session_*()
函数和超全局变量$_SESSION
”。此外,Symfony能在任何时候启动session。
不过,当面临的环境完全没可能(使用sf session)时,你可以使用一个特殊的storage bridge PhpBridgeSessionStorage
(存储桥接),它可以令Symfony在HttpFoundation组件之外操作一个session。但是要注意的是,使用这个时程序可能会中断,除非你十分小心:例如,遗产程序可能会抹除$_SESSION
。
典型用例可能像下面这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage;
// legacy application configures session
// 遗产级程序中配置session
ini_set('session.save_handler', 'files');
ini_set('session.save_path', '/tmp');
session_start();
// Get Symfony to interface with this existing session
// 取得Symfony session来桥接既有的(旧式)session
$session = new Session(new PhpBridgeSessionStorage());
// symfony will now interface with the existing PHP session
// Symfony已经可以使用既有的session
$session->start(); |
Symfony sessions把数据像属性一样存入到特殊的“Bags”中,session包在$_SESSION
超全局变量中使用一个键(key)。这意味着Symfony session无法在$_SESSION
中任意访问那些“可能是被遗产级程序所设置的”键(keys),尽管当session在存储时,所有的$_SESSION
内容都会被存下来。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。