浏览代码

merged branch martinmayer/session_saving (PR #1937)

Commits
-------

34a1b53 [HttpFoundation] Do not save session in Session::__destroy() when saved already

Discussion
----------

[HttpFoundation] Saving session data in __destroy() has a side effect on functional tests

Having functional test with several non-insulated requests, TestSessionListener invokes session saving at the end of every request. But instance of Session remains in memory until it's collected by garbage collector which saves the same data again in __destroy() method. The problem is that session object can get collected after other requests changed session data (e. g. user logged in) resulting in former data overwriting the latter.
Fabien Potencier 14 年之前
父节点
当前提交
a5ccda47b4
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      src/Symfony/Component/HttpFoundation/Session.php

+ 4 - 1
src/Symfony/Component/HttpFoundation/Session.php

@@ -29,6 +29,7 @@ class Session implements \Serializable
     protected $oldFlashes;
     protected $locale;
     protected $defaultLocale;
+    protected $saved;
 
     /**
      * Constructor.
@@ -46,6 +47,7 @@ class Session implements \Serializable
         $this->attributes = array();
         $this->setPhpDefaultLocale($this->defaultLocale);
         $this->started = false;
+        $this->saved = false;
     }
 
     /**
@@ -356,11 +358,12 @@ class Session implements \Serializable
             'flashes'    => $this->flashes,
             'locale'     => $this->locale,
         ));
+        $this->saved = true;
     }
 
     public function __destruct()
     {
-        if (true === $this->started) {
+        if (true === $this->started && !$this->saved) {
             $this->save();
         }
     }