improve session ID assignment to avoid possible overlaps.
Signed-off-by: Taylor Otwell <taylorotwell@gmail.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<?php namespace Laravel\Session\Drivers;
|
||||
<?php namespace Laravel\Session\Drivers; use Laravel\Config, Laravel\Str;
|
||||
|
||||
interface Driver {
|
||||
abstract class Driver {
|
||||
|
||||
/**
|
||||
* Load a session from storage by a given ID.
|
||||
@@ -10,7 +10,7 @@ interface Driver {
|
||||
* @param string $id
|
||||
* @return array
|
||||
*/
|
||||
public function load($id);
|
||||
abstract public function load($id);
|
||||
|
||||
/**
|
||||
* Save a given session to storage.
|
||||
@@ -20,7 +20,7 @@ interface Driver {
|
||||
* @param bool $exists
|
||||
* @return void
|
||||
*/
|
||||
public function save($session, $config, $exists);
|
||||
abstract public function save($session, $config, $exists);
|
||||
|
||||
/**
|
||||
* Delete a session from storage by a given ID.
|
||||
@@ -28,6 +28,43 @@ interface Driver {
|
||||
* @param string $id
|
||||
* @return void
|
||||
*/
|
||||
public function delete($id);
|
||||
abstract public function delete($id);
|
||||
|
||||
/**
|
||||
* Insert a fresh session and return the payload array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function fresh()
|
||||
{
|
||||
// We will simply generate an empty session payload array, using an ID
|
||||
// that is not currently assigned to any existing session within the
|
||||
// application and return it to the driver.
|
||||
return array('id' => $this->id(), 'data' => array(
|
||||
':new:' => array(),
|
||||
':old:' => array(),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a new session ID that isn't assigned to any current session.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function id()
|
||||
{
|
||||
$session = array();
|
||||
|
||||
// We'll containue generating random IDs until we find an ID that is
|
||||
// not currently assigned to a session. This is almost definitely
|
||||
// going to happen on the first iteration.
|
||||
do {
|
||||
|
||||
$session = $this->load($id = Str::random(40));
|
||||
|
||||
} while ( ! is_null($session));
|
||||
|
||||
return $id;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user