我遇到symfony会话值处理问题。Symfony会话值丢失
基本上,问题是这样的,我有一个激活的动作过滤器,它将模块和动作的值执行并将它们存储在超全局会话中。
这是我的过滤器的代码:
< ------ BEGIN CODE ---------------->
class getPrevModuleActionFilter extends sfFilter
{
public function execute ($filterChain)
{
//---------------Code to execute *BEFORE THE ACTION* execution---------------
if ($this->isFirstCall()) # Execute this filter only once
{
// Filters don't have direct access to request & user objects => Use context object to get them
$request = $this->getContext()->getRequest();
$user = $this->getContext()->getUser();
if($request->getParameter('action') !== "setCulture")
{
$_SESSION['prev_module'] = "M=".$request->getParameter('module');
$_SESSION['prev_action'] = "A=".$request->getParameter('action');
}
}
//---------------Execute next filter in the chain---------------
$filterChain->execute();
//---------------Code to execute *AFTER THE ACTION* execution, before the rendering---------------
//(...)
}
}
< - ---- END CODE ---------------->
奇怪的是,如果我在最后一分钟在前端Web控制器上执行print_r,我会看到:
当这不是一个行动“setCulture”一切顺利的话(即会话中取得前一个模块和行动,因为它应该)
在行动“setCulture”被执行:在会议之后的Symfony专卖店值:
Array ( [prev_module] => M= [prev_action] => A= (etc) )
即,它丢失了这两个条目的会话值。
我试过使用不同的命名空间,我尝试使用sfUser的symfony的setAttribute来处理会话值。最后,我尝试了PHP的原始会话处理。很显然,与用户和会话值存储相关的工厂关闭方法似乎弄乱了会话值!
我需要你的帮助。
规格:
- Symfony的版本:1.4.6
- PHP:5.3
- 我已经Symfony的缓存禁用
- 我运行的代码与frontend_dev.php控制器
不知道我是否正确理解你,但是在哪里设置了prev_module,并且prev_action是否执行了setCulture? –
你好Tamas :)其实,第一个行动是不是setCulture(这是家/索引),所以我很确定prev_mudule和prev_action得到它们各自的值。然后我请求setCulture动作并且没有执行任何操作....但是SESSION的值会丢失!有任何想法吗? (谢谢) –
我现在很确定,从我的测试中,如果在过滤器区域访问这个数组,symfony会混淆SESSION超全局。如果在动作中进行访问,则完全相同的代码可以平稳运行,而不会丢失SESSION值。奇怪的!我尝试了几乎所有的东西,甚至在sfSessionStorage.class.php中查找以找到它从SESSION中丢失的值。另一件事,当代码在过滤器中运行时,我在服务器上检查了会话中的symfony的php脚本,并且这些变量失去了它们的值,但实际上是在会话中!嗯......我迷路了! –