# PhpBridgeSessionStorage

class PhpBridgeSessionStorage extends NativeSessionStorage

Allows session to be started by PHP and managed by Symfony.

## Properties

`protected SessionBagInterface[]` | `$bags` |  | from NativeSessionStorage
`protected bool` | `$started` |  | from NativeSessionStorage
`protected bool` | `$closed` |  | from NativeSessionStorage
`protected AbstractProxy|SessionHandlerInterface` | `$saveHandler` |  | from NativeSessionStorage
`protected MetadataBag` | `$metadataBag` |  | from NativeSessionStorage

## Methods

`public` | `` | `__construct(SessionHandlerInterface|null $handler = null, MetadataBag $metaBag = null)` | No description |
`public` | `AbstractProxy|SessionHandlerInterface` | `getSaveHandler()` | Gets the save handler instance. | from NativeSessionStorage
`public` | `bool` | `start()` | Starts the session. |
`public` | `string` | `getId()` | Returns the session ID. | from NativeSessionStorage
`public` | `` | `setId(string $id)` | Sets the session ID. | from NativeSessionStorage
`public` | `mixed` | `getName()` | Returns the session name. | from NativeSessionStorage
`public` | `` | `setName(string $name)` | Sets the session name. | from NativeSessionStorage
`public` | `bool` | `regenerate(bool $destroy = false, int $lifetime = null)` | Regenerates id that represents this storage. | from NativeSessionStorage
`public` | `` | `save()` | Force the session to be saved and closed. | from NativeSessionStorage
`public` | `` | `clear()` | Clear all session data in memory. |
`public` | `` | `registerBag(SessionBagInterface $bag)` | Registers a SessionBagInterface for use. | from NativeSessionStorage
`public` | `SessionBagInterface` | `getBag(string $name)` | Gets a SessionBagInterface by name. | from NativeSessionStorage
`public` | `` | `setMetadataBag(MetadataBag $metaBag = null)` | No description | from NativeSessionStorage
`public` | `MetadataBag` | `getMetadataBag()` | Gets the MetadataBag. | from NativeSessionStorage
`public` | `bool` | `isStarted()` | Checks if the session is started. | from NativeSessionStorage
`public` | `` | `setOptions(array $options)` | Sets session.* ini variables. | from NativeSessionStorage
`public` | `` | `setSaveHandler(SessionHandlerInterface|null $saveHandler = null)` | Registers session save handler as a PHP session handler. | from NativeSessionStorage
`protected` | `` | `loadSession(array $session = null)` | Load the session with attributes. | from NativeSessionStorage

## Details

at line 25

### `__construct()`

`public __construct(SessionHandlerInterface|null $handler = null, MetadataBag $metaBag = null)`

#### Parameters

`SessionHandlerInterface|null` | `$handler` |
`MetadataBag` | `$metaBag` | MetadataBag

in NativeSessionStorage at line 119

### `getSaveHandler()`

`public AbstractProxy|SessionHandlerInterface getSaveHandler()`

Gets the save handler instance.

#### Return Value

`AbstractProxy|SessionHandlerInterface` |

at line 34

### `start()`

`public bool start()`

Starts the session.

#### Return Value

`bool` | True if started

#### Exceptions

RuntimeException | if something goes wrong starting the session

in NativeSessionStorage at line 154

### `getId()`

`public string getId()`

Returns the session ID.

#### Return Value

`string` | The session ID or empty

in NativeSessionStorage at line 162

### `setId()`

`public setId(string $id)`

Sets the session ID.

#### Parameters

`string` | `$id` |

in NativeSessionStorage at line 170

### `getName()`

`public mixed getName()`

Returns the session name.

#### Return Value

`mixed` | The session name

in NativeSessionStorage at line 178

### `setName()`

`public setName(string $name)`

Sets the session name.

#### Parameters

`string` | `$name` |

in NativeSessionStorage at line 186

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

in NativeSessionStorage at line 217

### `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 48

### `clear()`

`public clear()`

Clear all session data in memory.

in NativeSessionStorage at line 278

### `registerBag()`

`public registerBag(SessionBagInterface $bag)`

Registers a SessionBagInterface for use.

#### Parameters

`SessionBagInterface` | `$bag` |

in NativeSessionStorage at line 290

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

in NativeSessionStorage at line 305

### `setMetadataBag()`

`public setMetadataBag(MetadataBag $metaBag = null)`

#### Parameters

`MetadataBag` | `$metaBag` |

in NativeSessionStorage at line 319

### `getMetadataBag()`

`public MetadataBag getMetadataBag()`

Gets the MetadataBag.

#### Return Value

`MetadataBag` |

in NativeSessionStorage at line 327

### `isStarted()`

`public bool isStarted()`

Checks if the session is started.

#### Return Value

`bool` | True if started, false otherwise

in NativeSessionStorage at line 342

### `setOptions()`

`public setOptions(array $options)`

Sets session.* ini variables.

For convenience we omit 'session.' from the beginning of the keys. Explicitly ignores other ini keys.

#### Parameters

`array` | `$options` | Session ini directives array(key => value)

#### See also

http://php.net/session.configuration |

in NativeSessionStorage at line 389

### `setSaveHandler()`

`public setSaveHandler(SessionHandlerInterface|null $saveHandler = null)`

Registers session save handler as a PHP session handler.

To use internal PHP session save handlers, override this method using ini_set with session.save_handler and session.save_path e.g.

    ini_set('session.save_handler', 'files');
    ini_set('session.save_path', '/tmp');

or pass in a \SessionHandler instance which configures session.save_handler in the constructor, for a template see NativeFileSessionHandler or use handlers in composer package drak/native-session

#### Parameters

`SessionHandlerInterface|null` | `$saveHandler` |

#### Exceptions

InvalidArgumentException |

#### See also

http://php.net/session-set-save-handler |
http://php.net/sessionhandlerinterface |
http://php.net/sessionhandler |
http://github.com/drak/NativeSession |

in NativeSessionStorage at line 424

### `loadSession()`

`protected loadSession(array $session = null)`

Load the session with attributes.

After starting the session, PHP retrieves the session from whatever handlers are set to (either PHP's internal, or a custom save handler set with session_set_save_handler()). PHP takes the return value from the read() handler, unserializes it and populates $_SESSION with the result automatically.

#### Parameters

`array` | `$session` |

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

    /**
     * Allows session to be started by PHP and managed by Symfony.
     *
     * @author Drak <drak@zikula.org>
     */
    class PhpBridgeSessionStorage extends NativeSessionStorage
    {
        /**
         * @param \SessionHandlerInterface|null $handler
         * @param MetadataBag                   $metaBag MetadataBag
         */
        public function __construct($handler = null, MetadataBag $metaBag = null)
        {
            $this->setMetadataBag($metaBag);
            $this->setSaveHandler($handler);
        }

        /**
         * {@inheritdoc}
         */
        public function start()
        {
            if ($this->started) {
                return true;
            }

            $this->loadSession();

            return true;
        }

        /**
         * {@inheritdoc}
         */
        public function clear()
        {
            // clear out the bags and nothing else that may be set
            // since the purpose of this driver is to share a handler
            foreach ($this->bags as $bag) {
                $bag->clear();
            }

            // reconnect the bags to the session
            $this->loadSession();
        }
    }