Browse Source

[HttpFoundation] added a way to clear the session attributes

Fabien Potencier 14 năm trước cách đây
mục cha
commit
0fc6b15c17

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

@@ -153,13 +153,30 @@ class Session implements \Serializable
         if (false === $this->started) {
             $this->start();
         }
+
         if (array_key_exists($name, $this->attributes)) {
             unset($this->attributes[$name]);
         }
     }
 
+    /**
+     * Clears all attributes.
+     */
+    public function clear()
+    {
+        if (false === $this->started) {
+            $this->start();
+        }
+
+        $this->attributes = array();
+    }
+
+    /**
+     * Invalidates the current session.
+     */
     public function invalidate()
     {
+        $this->clear();
         $this->storage->regenerate();
     }
 
@@ -240,7 +257,9 @@ class Session implements \Serializable
     public function save()
     {
         if (true === $this->started) {
-            $this->attributes['_flash'] = array_diff_key($this->attributes['_flash'], $this->oldFlashes);
+            if (isset($this->attributes['_flash'])) {
+                $this->attributes['_flash'] = array_diff_key($this->attributes['_flash'], $this->oldFlashes);
+            }
             $this->storage->write('_symfony2', $this->attributes);
         }
     }

+ 0 - 1
src/Symfony/Component/HttpFoundation/SessionStorage/NativeSessionStorage.php

@@ -149,7 +149,6 @@ class NativeSessionStorage implements SessionStorageInterface
             return;
         }
 
-        // regenerate a new session id once per object
         session_regenerate_id($destroy);
 
         self::$sessionIdRegenerated = true;