// Start session with new session id.
$useStrictMode = $options['use_strict_mode'] ?? 0;
if ($useStrictMode) {
ini_set('session.use_strict_mode', '0');
}
session_id($newId);
if ($useStrictMode) {
ini_set('session.use_strict_mode', '1');
}
$success = @session_start($options);
if (!$success) {
$last = error_get_last();
$error = $last ? $last['message'] : 'Unknown error';
throw new RuntimeException($error);
}
}
} catch (Exception $e) {
throw new SessionException('Failed to start session: ' . $e->getMessage(), 500);
}
$this->started = true;
$this->onSessionStart();
$user = $this->__get('user');
if ($user && (!$user instanceof UserInterface || (method_exists($user, 'isValid') && !$user->isValid()))) {
$this->invalidate();
throw new SessionException('Invalid User object, session destroyed.', 500);
}
// Extend the lifetime of the session.
if ($sessionExists) {
$this->setCookie();
}
return $this;
}
"Failed to start session: session_start(): Session cannot be started after headers have already been sent"
* @deprecated 1.5 Use ->getInstance() method instead.
*/
public static function instance()
{
user_error(__CLASS__ . '::' . __FUNCTION__ . '() is deprecated since Grav 1.5, use ->getInstance() method instead', E_USER_DEPRECATED);
return static::getInstance();
}
/**
* Initialize session.
*
* Code in this function has been moved into SessionServiceProvider class.
*
* @return void
*/
public function init()
{
if ($this->autoStart && !$this->isStarted()) {
$this->start();
$this->autoStart = false;
}
}
/**
* @param bool $auto
* @return $this
*/
public function setAutoStart($auto)
{
$this->autoStart = (bool)$auto;
return $this;
}
/**
* Returns attributes.
*
* @return array Attributes
return null;
}
/**
* @param Config $config
*/
protected function initializeSession(Config $config): void
{
// FIXME: Initialize session should happen later after plugins have been loaded. This is a workaround to fix session issues in AWS.
if (isset($this->container['session']) && $config->get('system.session.initialize', true)) {
$this->startTimer('_init_session', 'Start Session');
/** @var Session $session */
$session = $this->container['session'];
try {
$session->init();
} catch (SessionException $e) {
$session->init();
$message = 'Session corruption detected, restarting session...';
$this->addMessage($message);
$this->container['messages']->add($message, 'error');
}
$this->stopTimer('_init_session');
}
}
}
}
// Initialize output buffering.
$this->initializeOutputBuffering($config);
// Set timezone, locale.
$this->initializeLocale($config);
// Load plugins.
$this->initializePlugins();
// Load pages.
$this->initializePages($config);
// Load accounts (decides class to be used).
// TODO: remove in 2.0.
$this->container['accounts'];
// Initialize session (used by URI, see issue #3269).
$this->initializeSession($config);
// Initialize URI (uses session, see issue #3269).
$this->initializeUri($config);
// Grav may return redirect response right away.
$redirectCode = (int)$config->get('system.pages.redirect_trailing_slash', 1);
if ($redirectCode) {
$response = $this->handleRedirectRequest($request, $redirectCode > 300 ? $redirectCode : null);
if ($response) {
$this->stopTimer('_init');
return $response;
}
}
$this->stopTimer('_init');
// Wrap call to next handler so that debugger can profile it.
/** @var Response $response */
$response = $debugger->profile(static function () use ($handler, $request) {
Grav\Common\Config\Config {#88}
private $handler;
/** @var ContainerInterface|null */
private $container;
/**
* {@inheritdoc}
* @throws InvalidArgumentException
*/
public function handle(ServerRequestInterface $request): ResponseInterface
{
$middleware = array_shift($this->middleware);
// Use default callable if there is no middleware.
if ($middleware === null) {
return call_user_func($this->handler, $request);
}
if ($middleware instanceof MiddlewareInterface) {
return $middleware->process($request, clone $this);
}
if (null === $this->container || !$this->container->has($middleware)) {
throw new InvalidArgumentException(
sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
$middleware
);
}
array_unshift($this->middleware, $this->container->get($middleware));
return $this->handle($request);
}
}
// Use default callable if there is no middleware.
if ($middleware === null) {
return call_user_func($this->handler, $request);
}
if ($middleware instanceof MiddlewareInterface) {
return $middleware->process($request, clone $this);
}
if (null === $this->container || !$this->container->has($middleware)) {
throw new InvalidArgumentException(
sprintf('The middleware is not a valid %s and is not passed in the Container', MiddlewareInterface::class),
$middleware
);
}
array_unshift($this->middleware, $this->container->get($middleware));
return $this->handle($request);
}
}
Nyholm\Psr7\ServerRequest {#65}
},
'pagesProcessor' => function () {
return new PagesProcessor($this);
},
'debuggerAssetsProcessor' => function () {
return new DebuggerAssetsProcessor($this);
},
'renderProcessor' => function () {
return new RenderProcessor($this);
},
]
);
$default = static function () {
return new Response(404, ['Expires' => 0, 'Cache-Control' => 'no-store, max-age=0'], 'Not Found');
};
$collection = new RequestHandler($this->middleware, $default, $container);
$response = $collection->handle($this['request']);
$body = $response->getBody();
/** @var Messages $messages */
$messages = $this['messages'];
// Prevent caching if session messages were displayed in the page.
$noCache = $messages->isCleared();
if ($noCache) {
$response = $response->withHeader('Cache-Control', 'no-store, max-age=0');
}
// Handle ETag and If-None-Match headers.
if ($response->getHeaderLine('ETag') === '1') {
$etag = md5($body);
$response = $response->withHeader('ETag', '"' . $etag . '"');
$search = trim($this['request']->getHeaderLine('If-None-Match'), '"');
if ($noCache === false && $search === $etag) {
$response = $response->withStatus(304);
$body = '';
Nyholm\Psr7\ServerRequest {#65}
if (!is_file($autoload)) {
die('Please run: <i>bin/grav install</i>');
}
// Register the auto-loader.
$loader = require $autoload;
use Grav\Common\Grav;
use RocketTheme\Toolbox\Event\Event;
// Get the Grav instance
$grav = Grav::instance(
array(
'loader' => $loader
)
);
// Process the page
try {
$grav->process();
} catch (\Error $e) {
$grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
throw $e;
} catch (\Exception $e) {
$grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
throw $e;
}
| Key | Value |
| CONTEXT_DOCUMENT_ROOT | "/home/dmddigit/public_html/mappingthemegacity.org"
|
| CONTEXT_PREFIX | "" |
| DOCUMENT_ROOT | "/home/dmddigit/public_html/mappingthemegacity.org"
|
| GATEWAY_INTERFACE | "CGI/1.1"
|
| H2PUSH | "off"
|
| H2_PUSH | "off"
|
| H2_PUSHED | "" |
| H2_PUSHED_ON | "" |
| H2_STREAM_ID | "3"
|
| H2_STREAM_TAG | "1679683-1429-3"
|
| HTTP2 | "on"
|
| HTTPS | "on"
|
| HTTP_ACCEPT | "*/*"
|
| HTTP_ACCEPT_ENCODING | "gzip, br, zstd, deflate"
|
| HTTP_HOST | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| HTTP_USER_AGENT | "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
|
| HTTP_X_HTTPS | "1"
|
| PATH | "/bin:/usr/bin"
|
| PHP_INI_SCAN_DIR | "/opt/cpanel/ea-php82/root/etc:/opt/cpanel/ea-php82/root/etc/php.d:."
|
| QUERY_STRING | "" |
| REDIRECT_H2PUSH | "off"
|
| REDIRECT_H2_PUSH | "off"
|
| REDIRECT_H2_PUSHED | "" |
| REDIRECT_H2_PUSHED_ON | "" |
| REDIRECT_H2_STREAM_ID | "3"
|
| REDIRECT_H2_STREAM_TAG | "1679683-1429-3"
|
| REDIRECT_HTTP2 | "on"
|
| REDIRECT_HTTPS | "on"
|
| REDIRECT_SCRIPT_URI | "https://www.mappingthemegacity.dmd.digitalscholar.rochester.edu/sitemap.xml"
|
| REDIRECT_SCRIPT_URL | "/sitemap.xml"
|
| REDIRECT_SSL_TLS_SNI | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| REDIRECT_STATUS | "200"
|
| REDIRECT_UNIQUE_ID | "asi1oG2oVByksB1PCqtf8AAAAw4"
|
| REDIRECT_URL | "/sitemap.xml"
|
| REMOTE_ADDR | "216.73.217.140"
|
| REMOTE_PORT | "52310"
|
| REQUEST_METHOD | "GET"
|
| REQUEST_SCHEME | "https"
|
| REQUEST_URI | "/sitemap.xml"
|
| SCRIPT_FILENAME | "/home/dmddigit/public_html/mappingthemegacity.org/index.php"
|
| SCRIPT_NAME | "/index.php"
|
| SCRIPT_URI | "https://www.mappingthemegacity.dmd.digitalscholar.rochester.edu/sitemap.xml"
|
| SCRIPT_URL | "/sitemap.xml"
|
| SERVER_ADDR | "159.203.125.59"
|
| SERVER_ADMIN | "webmaster@mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| SERVER_NAME | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| SERVER_PORT | "443"
|
| SERVER_PROTOCOL | "HTTP/2.0"
|
| SERVER_SIGNATURE | "" |
| SERVER_SOFTWARE | "Apache"
|
| SSL_TLS_SNI | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| TZ | "UTC"
|
| UNIQUE_ID | "asi1oG2oVByksB1PCqtf8AAAAw4"
|
| PHP_SELF | "/index.php"
|
| REQUEST_TIME_FLOAT | 1791538592.727
|
| REQUEST_TIME | 1791538592
|
| argv | [] |
| argc | 0
|
| Key | Value |
| CONTEXT_DOCUMENT_ROOT | "/home/dmddigit/public_html/mappingthemegacity.org"
|
| CONTEXT_PREFIX | "" |
| DOCUMENT_ROOT | "/home/dmddigit/public_html/mappingthemegacity.org"
|
| GATEWAY_INTERFACE | "CGI/1.1"
|
| H2PUSH | "off"
|
| H2_PUSH | "off"
|
| H2_PUSHED | "" |
| H2_PUSHED_ON | "" |
| H2_STREAM_ID | "3"
|
| H2_STREAM_TAG | "1679683-1429-3"
|
| HTTP2 | "on"
|
| HTTPS | "on"
|
| HTTP_ACCEPT | "*/*"
|
| HTTP_ACCEPT_ENCODING | "gzip, br, zstd, deflate"
|
| HTTP_HOST | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| HTTP_USER_AGENT | "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
|
| HTTP_X_HTTPS | "1"
|
| PATH | "/bin:/usr/bin"
|
| PHP_INI_SCAN_DIR | "/opt/cpanel/ea-php82/root/etc:/opt/cpanel/ea-php82/root/etc/php.d:."
|
| QUERY_STRING | "" |
| REDIRECT_H2PUSH | "off"
|
| REDIRECT_H2_PUSH | "off"
|
| REDIRECT_H2_PUSHED | "" |
| REDIRECT_H2_PUSHED_ON | "" |
| REDIRECT_H2_STREAM_ID | "3"
|
| REDIRECT_H2_STREAM_TAG | "1679683-1429-3"
|
| REDIRECT_HTTP2 | "on"
|
| REDIRECT_HTTPS | "on"
|
| REDIRECT_SCRIPT_URI | "https://www.mappingthemegacity.dmd.digitalscholar.rochester.edu/sitemap.xml"
|
| REDIRECT_SCRIPT_URL | "/sitemap.xml"
|
| REDIRECT_SSL_TLS_SNI | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| REDIRECT_STATUS | "200"
|
| REDIRECT_UNIQUE_ID | "asi1oG2oVByksB1PCqtf8AAAAw4"
|
| REDIRECT_URL | "/sitemap.xml"
|
| REMOTE_ADDR | "216.73.217.140"
|
| REMOTE_PORT | "52310"
|
| REQUEST_METHOD | "GET"
|
| REQUEST_SCHEME | "https"
|
| REQUEST_URI | "/sitemap.xml"
|
| SCRIPT_FILENAME | "/home/dmddigit/public_html/mappingthemegacity.org/index.php"
|
| SCRIPT_NAME | "/index.php"
|
| SCRIPT_URI | "https://www.mappingthemegacity.dmd.digitalscholar.rochester.edu/sitemap.xml"
|
| SCRIPT_URL | "/sitemap.xml"
|
| SERVER_ADDR | "159.203.125.59"
|
| SERVER_ADMIN | "webmaster@mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| SERVER_NAME | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| SERVER_PORT | "443"
|
| SERVER_PROTOCOL | "HTTP/2.0"
|
| SERVER_SIGNATURE | "" |
| SERVER_SOFTWARE | "Apache"
|
| SSL_TLS_SNI | "www.mappingthemegacity.dmd.digitalscholar.rochester.edu"
|
| TZ | "UTC"
|
| UNIQUE_ID | "asi1oG2oVByksB1PCqtf8AAAAw4"
|