NEW: Move session activation to SessionMiddleware.

This commit is contained in:
Sam Minnee 2017-06-23 14:45:54 +12:00 committed by Damian Mooyman
parent 254204a3a6
commit db080c0603
4 changed files with 30 additions and 9 deletions

View File

@ -3,6 +3,7 @@ Name: requestprocessors
---
SilverStripe\Control\Director:
middlewares:
SessionMiddleware: 'SilverStripe\Control\SessionMiddleware'
RequestProcessor: 'SilverStripe\Control\RequestProcessor'
FlushMiddleware: '%$SilverStripe\Control\FlushMiddleware'

View File

@ -132,13 +132,7 @@ class Director implements TemplateGlobalProvider
}
// Generate output
$result = static::handleRequest($request);
// Save session data. Note that save() will start/resume the session if required.
$request->getSession()->save();
// Return
return $result;
return static::handleRequest($request);
}
/**

View File

@ -96,8 +96,6 @@ class HTTPApplication implements Application
// Ensure boot is invoked
return $this->execute($request, function (HTTPRequest $request) {
// Start session and execute
$request->getSession()->init();
return Director::direct($request);
}, $flush);
}

View File

@ -0,0 +1,28 @@
<?php
namespace SilverStripe\Control;
class SessionMiddleware implements HTTPMiddleware
{
/**
* @inheritdoc
*/
public function process(HTTPRequest $request, callable $delegate)
{
try {
// Start session and execute
$request->getSession()->init();
// Generate output
$response = $delegate($request);
// Save session data, even if there was an exception.
// Note that save() will start/resume the session if required.
} finally {
$request->getSession()->save();
}
return $response;
}
}