1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
<?php
declare(strict_types=1);
namespace SimpleSAML\Module\core\Auth\Process;
use SimpleSAML\Configuration;
use SimpleSAML\Session;
use SimpleSAML\SessionHandler;
/**
* Extend IdP session and cookies.
*/
class ExtendIdPSession extends \SimpleSAML\Auth\ProcessingFilter
{
/**
* @param array &$state
* @return void
*/
public function process(&$state)
{
assert(is_array($state));
if (empty($state['Expire']) || empty($state['Authority'])) {
return;
}
$now = time();
$delta = $state['Expire'] - $now;
$globalConfig = Configuration::getInstance();
$sessionDuration = $globalConfig->getInteger('session.duration', 28800); // 8*60*60
// Extend only if half of session duration already passed
if ($delta >= ($sessionDuration * 0.5)) {
return;
}
// Update authority expire time
$session = Session::getSessionFromRequest();
$session->setAuthorityExpire($state['Authority']);
// Update session cookies duration
// If remember me is active
$rememberMeExpire = $session->getRememberMeExpire();
if (
!empty($state['RememberMe'])
&& $rememberMeExpire !== null
&& $globalConfig->getBoolean('session.rememberme.enable', false)
) {
$session->setRememberMeExpire();
return;
}
// Or if session lifetime is more than zero
$sessionHandler = SessionHandler::getSessionHandler();
$cookieParams = $sessionHandler->getCookieParams();
if ($cookieParams['lifetime'] > 0) {
$session->updateSessionCookies();
}
}
}
|