开发者

Symfony Session Values Lost

开发者 https://www.devze.com 2023-04-11 05:56 出处:网络
I\'m experiencing a problem with symfony\'s session values handling. Basically, the problem is this, I have a action filter activated that takes the values of the module and action executed and stor

I'm experiencing a problem with symfony's session values handling.

Basically, the problem is this, I have a action filter activated that takes the values of the module and action executed and stores them in the session superglobal.

This is my filter's code:

<------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---------------->

The weird thing is that if I do a print_r on the front web controller at the very last minute I see that:

  1. When an action that's not 'setCulture' all goes well (ie, the session gets previous module and action as it should)

  2. When action 'setCulture' gets executed: Symfony stores following values in session:

    Array ( 
        [prev_module] => M= 
        [prev_action] => A=    
        (etc)
    )
    

    ie, it looses the values of session for those 2 entries.

I tried using different namespaces, I tried using symfony's setAttribute from sfUser to handle session values. At the end I tried the raw session handling of PHP. Apparently it seems that the shutdown methods of the factories related to user and storage of session values mess up the session values!

I need your help, please.

SPECS:

  • Symfony version: 1.4.6
  • PHP: 5.3
  • I have Symfony's cache disabled
  • I'm running the code with the frontend_dev.php controller


Well, I guess Symfony messes up SESSION and COOKIES when used in filters.

I ended up creating my own filter mechanism that performs actions for an entire app.

So, to clarify, my choice was:

  1. create a class autoloaded in root lib folder, that has a static method called 'fe_app_init'
  2. add a preExecute method to the actions of each module in FE app that uses fe_app_init from that class

Now the fe_app_init() handles the values in SESSION rightfully.

It's a shame that Symfony 1.4 has a tool such as filters but then messes up SESSION and COOKIES handling in those.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号