# SessionStorageInterface

interface SessionStorageInterface

StorageInterface.

## Methods

`public` | `bool` | `start()` | Starts the session. |
`public` | `bool` | `isStarted()` | Checks if the session is started. |
`public` | `string` | `getId()` | Returns the session ID. |
`public` | `` | `setId(string $id)` | Sets the session ID. |
`public` | `mixed` | `getName()` | Returns the session name. |
`public` | `` | `setName(string $name)` | Sets the session name. |
`public` | `bool` | `regenerate(bool $destroy = false, int $lifetime = null)` | Regenerates id that represents this storage. |
`public` | `` | `save()` | Force the session to be saved and closed. |
`public` | `` | `clear()` | Clear all session data in memory. |
`public` | `SessionBagInterface` | `getBag(string $name)` | Gets a SessionBagInterface by name. |
`public` | `` | `registerBag(SessionBagInterface $bag)` | Registers a SessionBagInterface for use. |
`public` | `MetadataBag` | `getMetadataBag()` | No description |

## Details

at line 31

### `start()`

`public bool start()`

Starts the session.

#### Return Value

`bool` | True if started

#### Exceptions

RuntimeException | if something goes wrong starting the session

at line 38

### `isStarted()`

`public bool isStarted()`

Checks if the session is started.

#### Return Value

`bool` | True if started, false otherwise

at line 45

### `getId()`

`public string getId()`

Returns the session ID.

#### Return Value

`string` | The session ID or empty

at line 52

### `setId()`

`public setId(string $id)`

Sets the session ID.

#### Parameters

`string` | `$id` |

at line 59

### `getName()`

`public mixed getName()`

Returns the session name.

#### Return Value

`mixed` | The session name

at line 66

### `setName()`

`public setName(string $name)`

Sets the session name.

#### Parameters

`string` | `$name` |

at line 97

### `regenerate()`

`public bool regenerate(bool $destroy = false, int $lifetime = null)`

Regenerates id that represents this storage.

This method must invoke session_regenerate_id($destroy) unless this interface is used for a storage object designed for unit or functional testing where a real PHP session would interfere with testing.

Note regenerate+destroy should not clear the session data in memory only delete the session data from persistent storage.

Care: When regenerating the session ID no locking is involved in PHP's session design. See https://bugs.php.net/bug.php?id=61470 for a discussion. So you must make sure the regenerated session is saved BEFORE sending the headers with the new ID. Symfony's HttpKernel offers a listener for this. See Symfony\Component\HttpKernel\EventListener\SaveSessionListener. Otherwise session data could get lost again for concurrent requests with the new ID. One result could be that you get logged out after just logging in.

#### Parameters

`bool` | `$destroy` | Destroy session when regenerating?
`int` | `$lifetime` | Sets the cookie lifetime for the session cookie. A null value will leave the system settings unchanged, 0 sets the cookie to expire with browser session. Time is in seconds, and is not a Unix timestamp.

#### Return Value

`bool` | True if session regenerated, false if error

#### Exceptions

RuntimeException | If an error occurs while regenerating this storage

at line 110

### `save()`

`public save()`

Force the session to be saved and closed.

This method must invoke session_write_close() unless this interface is used for a storage object design for unit or functional testing where a real PHP session would interfere with testing, in which case it should actually persist the session data if required.

#### Exceptions

RuntimeException | if the session is saved without being started, or if the session is already closed

at line 115

### `clear()`

`public clear()`

Clear all session data in memory.

at line 126

### `getBag()`

`public SessionBagInterface getBag(string $name)`

Gets a SessionBagInterface by name.

#### Parameters

`string` | `$name` |

#### Return Value

`SessionBagInterface` |

#### Exceptions

InvalidArgumentException | If the bag does not exist

at line 131

### `registerBag()`

`public registerBag(SessionBagInterface $bag)`

Registers a SessionBagInterface for use.

#### Parameters

`SessionBagInterface` | `$bag` |

at line 136

### `getMetadataBag()`

`public MetadataBag getMetadataBag()`

#### Return Value

`MetadataBag` |

## Source code

    <?php

    /*
     * This file is part of the Symfony package.
     *
     * (c) Fabien Potencier <fabien@symfony.com>
     *
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     */

    namespace Symfony\Component\HttpFoundation\Session\Storage;

    use Symfony\Component\HttpFoundation\Session\SessionBagInterface;

    /**
     * StorageInterface.
     *
     * @author Fabien Potencier <fabien@symfony.com>
     * @author Drak <drak@zikula.org>
     */
    interface SessionStorageInterface
    {
        /**
         * Starts the session.
         *
         * @return bool True if started
         *
         * @throws \RuntimeException if something goes wrong starting the session
         */
        public function start();

        /**
         * Checks if the session is started.
         *
         * @return bool True if started, false otherwise
         */
        public function isStarted();

        /**
         * Returns the session ID.
         *
         * @return string The session ID or empty
         */
        public function getId();

        /**
         * Sets the session ID.
         *
         * @param string $id
         */
        public function setId($id);

        /**
         * Returns the session name.
         *
         * @return mixed The session name
         */
        public function getName();

        /**
         * Sets the session name.
         *
         * @param string $name
         */
        public function setName($name);

        /**
         * Regenerates id that represents this storage.
         *
         * This method must invoke session_regenerate_id($destroy) unless
         * this interface is used for a storage object designed for unit
         * or functional testing where a real PHP session would interfere
         * with testing.
         *
         * Note regenerate+destroy should not clear the session data in memory
         * only delete the session data from persistent storage.
         *
         * Care: When regenerating the session ID no locking is involved in PHP's
         * session design. See https://bugs.php.net/bug.php?id=61470 for a discussion.
         * So you must make sure the regenerated session is saved BEFORE sending the
         * headers with the new ID. Symfony's HttpKernel offers a listener for this.
         * See Symfony\Component\HttpKernel\EventListener\SaveSessionListener.
         * Otherwise session data could get lost again for concurrent requests with the
         * new ID. One result could be that you get logged out after just logging in.
         *
         * @param bool $destroy  Destroy session when regenerating?
         * @param int  $lifetime Sets the cookie lifetime for the session cookie. A null value
         *                       will leave the system settings unchanged, 0 sets the cookie
         *                       to expire with browser session. Time is in seconds, and is
         *                       not a Unix timestamp.
         *
         * @return bool True if session regenerated, false if error
         *
         * @throws \RuntimeException If an error occurs while regenerating this storage
         */
        public function regenerate($destroy = false, $lifetime = null);

        /**
         * Force the session to be saved and closed.
         *
         * This method must invoke session_write_close() unless this interface is
         * used for a storage object design for unit or functional testing where
         * a real PHP session would interfere with testing, in which case
         * it should actually persist the session data if required.
         *
         * @throws \RuntimeException if the session is saved without being started, or if the session
         *                           is already closed
         */
        public function save();

        /**
         * Clear all session data in memory.
         */
        public function clear();

        /**
         * Gets a SessionBagInterface by name.
         *
         * @param string $name
         *
         * @return SessionBagInterface
         *
         * @throws \InvalidArgumentException If the bag does not exist
         */
        public function getBag($name);

        /**
         * Registers a SessionBagInterface for use.
         */
        public function registerBag(SessionBagInterface $bag);

        /**
         * @return MetadataBag
         */
        public function getMetadataBag();
    }