| 
<?phpdeclare(strict_types=1);
 
 use Airship\Engine\{
 AutoPilot,
 State
 };
 use ParagonIE\Cookie\{
 Cookie,
 Session
 };
 
 /**
 * @global State $state
 */
 
 // Start the session
 if (!Session::id()) {
 if (!isset($state)) {
 $state = State::instance();
 }
 $session_config = [
 // Prevent uninitialized sessions from being accepted
 'use_strict_mode' => true,
 // The session ID cookie should be inaccessible to JavaScript
 'cookie_httponly' => true,
 // If we're over HTTPS, enforce secure=1
 'cookie_secure' => AutoPilot::isHTTPSConnection()
 ];
 if (isset($state->universal['session_config'])) {
 $session_config = $state->universal['session_config'] + $session_config;
 if (isset($session_config['cookie_domain'])) {
 if ($session_config['cookie_domain'] === '*' || \trim($session_config['cookie_domain']) === '') {
 unset($session_config['cookie_domain']);
 }
 }
 }
 
 Session::start(
 Cookie::SAME_SITE_RESTRICTION_STRICT,
 $session_config
 );
 }
 
 if (empty($_SESSION['created_canary'])) {
 // We haven't seen this session ID before
 $_SESSION = [];
 Session::regenerate(true);
 // Create the canary
 $_SESSION['created_canary'] = (new \DateTime())
 ->format(\AIRSHIP_DATE_FORMAT);
 } else {
 $dt = (new \DateTime($_SESSION['created_canary']))->add(
 new \DateInterval('PT01H')
 );
 $now = new \DateTime();
 // Has an hour passed?
 if ($dt < $now) {
 // An hour has passed:
 Session::regenerate(true);
 // Recreate the canary
 $_SESSION['created_canary'] = $now->format(\AIRSHIP_DATE_FORMAT);
 }
 }
 
 |