class SessionHandler
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/Session/SessionHandler.php \Drupal\Core\Session\SessionHandler
- 8.9.x core/lib/Drupal/Core/Session/SessionHandler.php \Drupal\Core\Session\SessionHandler
- 11.x core/lib/Drupal/Core/Session/SessionHandler.php \Drupal\Core\Session\SessionHandler
Default session handler.
Hierarchy
- class \Drupal\Core\Session\SessionHandler extends \Symfony\Component\HttpFoundation\Session\Storage\Proxy\AbstractProxy implements \Drupal\Core\Session\SessionHandlerInterface uses \Drupal\Core\DependencyInjection\DependencySerializationTrait
Expanded class hierarchy of SessionHandler
1 string reference to 'SessionHandler'
- core.services.yml in core/
core.services.yml - core/core.services.yml
1 service uses SessionHandler
File
-
core/
lib/ Drupal/ Core/ Session/ SessionHandler.php, line 15
Namespace
Drupal\Core\SessionView source
class SessionHandler extends AbstractProxy implements \SessionHandlerInterface {
use DependencySerializationTrait;
/**
* The request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/**
* The database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected $connection;
/**
* Constructs a new SessionHandler instance.
*
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* The request stack.
* @param \Drupal\Core\Database\Connection $connection
* The database connection.
* @param \Drupal\Component\Datetime\TimeInterface|null $time
* The time service.
*/
public function __construct(RequestStack $request_stack, Connection $connection, ?TimeInterface $time = NULL) {
$this->requestStack = $request_stack;
$this->connection = $connection;
if (!$time) {
@trigger_error('Calling ' . __METHOD__ . '() without the $time argument is deprecated in drupal:10.3.0 and it will be required in drupal:11.0.0. See https://www.drupal.org/node/3387233', E_USER_DEPRECATED);
$this->time = \Drupal::service(TimeInterface::class);
}
}
/**
* {@inheritdoc}
*/
public function open(string $save_path, string $name) : bool {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function read(string $sid) : string|false {
$data = '';
if (!empty($sid)) {
// Read the session data from the database.
$query = $this->connection
->queryRange('SELECT [session] FROM {sessions} WHERE [sid] = :sid', 0, 1, [
':sid' => Crypt::hashBase64($sid),
]);
$data = (string) $query->fetchField();
}
return $data;
}
/**
* {@inheritdoc}
*/
public function write(string $sid, string $value) : bool {
$request = $this->requestStack
->getCurrentRequest();
$fields = [
'uid' => $request->getSession()
->get('uid', 0),
'hostname' => $request->getClientIP(),
'session' => $value,
'timestamp' => $this->time
->getRequestTime(),
];
$this->connection
->merge('sessions')
->keys([
'sid' => Crypt::hashBase64($sid),
])
->fields($fields)
->execute();
return TRUE;
}
/**
* {@inheritdoc}
*/
public function close() : bool {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function destroy(string $sid) : bool {
// Delete session data.
$this->connection
->delete('sessions')
->condition('sid', Crypt::hashBase64($sid))
->execute();
return TRUE;
}
/**
* {@inheritdoc}
*/
public function gc(int $lifetime) : int|false {
// Be sure to adjust 'php_value session.gc_maxlifetime' to a large enough
// value. For example, if you want user sessions to stay in your database
// for three weeks before deleting them, you need to set gc_maxlifetime
// to '1814400'. At that value, only after a user doesn't log in after
// three weeks (1814400 seconds) will their session be removed.
return $this->connection
->delete('sessions')
->condition('timestamp', $this->time
->getRequestTime() - $lifetime, '<')
->execute();
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overrides |
---|---|---|---|---|
DependencySerializationTrait::$_entityStorages | protected | property | ||
DependencySerializationTrait::$_serviceIds | protected | property | ||
DependencySerializationTrait::__sleep | public | function | 1 | |
DependencySerializationTrait::__wakeup | public | function | 2 | |
SessionHandler::$connection | protected | property | The database connection. | |
SessionHandler::$requestStack | protected | property | The request stack. | |
SessionHandler::close | public | function | ||
SessionHandler::destroy | public | function | ||
SessionHandler::gc | public | function | ||
SessionHandler::open | public | function | ||
SessionHandler::read | public | function | ||
SessionHandler::write | public | function | ||
SessionHandler::__construct | public | function | Constructs a new SessionHandler instance. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.