2015-08-17 17:00:26 -07:00
< ? 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 ;
/**
* Metadata container .
*
* Adds metadata to the session .
*
* @ author Drak < drak @ zikula . org >
*/
class MetadataBag implements SessionBagInterface
{
const CREATED = 'c' ;
const UPDATED = 'u' ;
const LIFETIME = 'l' ;
/**
* @ var string
*/
private $name = '__metadata' ;
/**
* @ var string
*/
private $storageKey ;
/**
* @ var array
*/
protected $meta = array ( self :: CREATED => 0 , self :: UPDATED => 0 , self :: LIFETIME => 0 );
/**
* Unix timestamp .
*
* @ var int
*/
private $lastUsed ;
/**
* @ var int
*/
private $updateThreshold ;
/**
* Constructor .
*
2017-02-02 16:28:38 -08:00
* @ param string $storageKey The key used to store bag in the session
2015-08-17 17:00:26 -07:00
* @ param int $updateThreshold The time to wait between two UPDATED updates
*/
public function __construct ( $storageKey = '_sf2_meta' , $updateThreshold = 0 )
{
$this -> storageKey = $storageKey ;
$this -> updateThreshold = $updateThreshold ;
}
/**
* { @ inheritdoc }
*/
public function initialize ( array & $array )
{
$this -> meta = & $array ;
if ( isset ( $array [ self :: CREATED ])) {
$this -> lastUsed = $this -> meta [ self :: UPDATED ];
$timeStamp = time ();
if ( $timeStamp - $array [ self :: UPDATED ] >= $this -> updateThreshold ) {
$this -> meta [ self :: UPDATED ] = $timeStamp ;
}
} else {
$this -> stampCreated ();
}
}
/**
* Gets the lifetime that the session cookie was set with .
*
* @ return int
*/
public function getLifetime ()
{
return $this -> meta [ self :: LIFETIME ];
}
/**
* Stamps a new session ' s metadata .
*
* @ 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 .
*/
public function stampNew ( $lifetime = null )
{
$this -> stampCreated ( $lifetime );
}
/**
* { @ inheritdoc }
*/
public function getStorageKey ()
{
return $this -> storageKey ;
}
/**
* Gets the created timestamp metadata .
*
* @ return int Unix timestamp
*/
public function getCreated ()
{
return $this -> meta [ self :: CREATED ];
}
/**
* Gets the last used metadata .
*
* @ return int Unix timestamp
*/
public function getLastUsed ()
{
return $this -> lastUsed ;
}
/**
* { @ inheritdoc }
*/
public function clear ()
{
// nothing to do
}
/**
* { @ inheritdoc }
*/
public function getName ()
{
return $this -> name ;
}
/**
* Sets name .
*
* @ param string $name
*/
public function setName ( $name )
{
$this -> name = $name ;
}
private function stampCreated ( $lifetime = null )
{
$timeStamp = time ();
$this -> meta [ self :: CREATED ] = $this -> meta [ self :: UPDATED ] = $this -> lastUsed = $timeStamp ;
$this -> meta [ self :: LIFETIME ] = ( null === $lifetime ) ? ini_get ( 'session.cookie_lifetime' ) : $lifetime ;
}
}