我遇到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腳本,並且這些變量失去了它們的值,但實際上是在會話中!嗯......我迷路了! –