2. 为了这个说明的目的,我们定义了一个中间件会话验证器。常量和属性反映了会话指纹,这是我们用来整合网站访问者的 IP 地址、浏览器和语言设置等因素的术语。
namespaceApplication\MiddleWare\Session;useInvalidArgumentException;use Psr\Http\Message\{ServerRequestInterface,ResponseInterface};use Application\MiddleWare\{Constants,Response,TextStream};classValidator{constKEY_TEXT='text';constKEY_SESSION='thumbprint';constKEY_STATUS_CODE='code';constKEY_STATUS_REASON='reason';constKEY_STOP_TIME='stop_time';constERROR_TIME='ERROR: session has exceeded stop time';constERROR_SESSION='ERROR: thumbprint does not match';constSUCCESS_SESSION='SUCCESS: session validates OK';protected$sessionKey;protected$currentPrint;protected$storedPrint;protected$currentTime;protected$storedTime;
<?php
use Zend\Expressive\Container\ApplicationFactory;
use Zend\Expressive\Helper;
return [
'dependencies' => [
'factories' => [
Helper\ServerUrlMiddleware::class =>
Helper\ServerUrlMiddlewareFactory::class,
Helper\UrlHelperMiddleware::class =>
Helper\UrlHelperMiddlewareFactory::class,
// insert your own class here
],
],
session_start(); // to support use of $_SESSION
$loader = include __DIR__ . '/libraries/vendor/autoload.php';
$loader->add('Application', __DIR__ . '/libraries/vendor');
$loader->add('Psr', __DIR__ . '/libraries/vendor');
$session = JFactory::getSession();
$request =
(new Application\MiddleWare\ServerRequest())->initialize();
$response = new Application\MiddleWare\Response();
$validator = new Application\Security\Session\Validator(
$request, $session);
$response = $validator($request, $response);
if ($response->getStatusCode() != 200) {
// take some action
}
cd /path/to/source/for/this/chapter
php composer.phar create-project zendframework/zend-expressive-skeleton expressive