xorock / expressive-zend-session
为 Zend Expressive 提供的 Zend Session 中间件
0.1.1
2016-07-28 09:34 UTC
Requires
- php: ^5.5 || ^7.0
- container-interop/container-interop: ^1.1
- psr/http-message: ^1.0
- zendframework/zend-session: ^2.7
Requires (Dev)
- phpunit/phpunit: ^4.7
- squizlabs/php_codesniffer: ^2.3
Suggests
- mtymek/expressive-config-manager: Allows collecting and merging configuration from different sources
This package is not auto-updated.
Last update: 2024-09-14 19:52:57 UTC
README
为 Zend Session 提供对 Expressive 的集成。
使用 composer 安装此库
$ composer require xorock/expressive-zend-session
用法
我建议安装 Expressive Configuration Manager
Zend Session 内置了 ConfigProvider
类,负责自动注册组件。使用 Expressive Configuration Manager,您可以只用一行代码就注册所有工厂
$configManager = new ConfigManager([ \Zend\Session\ConfigProvider::class, new PhpFileProvider('config/autoload/{{,*.}global,{,*.}local}.php'), ], 'data/config-cache.php');
现在,Zend Session 将在合并的配置文件中搜索预定义的键。请参阅 Zend Session 文档。
例如,我们可以创建以下文件
session.global.php
use Zend\Session\Storage\SessionArrayStorage; return [ 'session_config' => [ 'name' => 'SID', 'cookie_httponly' => true, 'cookie_path' => '/', 'cookie_secure' => false, 'use_cookies' => true, 'cookie_lifetime' => 3600, 'save_path' => '/temp/data/session', ], 'session_storage' => [ 'type' => SessionArrayStorage::class ], ];
注意: SessionManager 存在一个 bug,在使用 SessionStorage 类时可能导致致命错误。
现在您可以注册中间件
middleware-pipeline.global.php
use Mylab\Session\ZendSessionMiddleware; use Mylab\Session\ZendSessionMiddlewareFactory; // ... 'dependencies' => [ 'factories' => [ Helper\ServerUrlMiddleware::class => Helper\ServerUrlMiddlewareFactory::class, Helper\UrlHelperMiddleware::class => Helper\UrlHelperMiddlewareFactory::class, ZendSessionMiddleware::class => ZendSessionMiddlewareFactory::class, ], ], 'middleware_pipeline' => [ 'always' => [ 'middleware' => [ Helper\ServerUrlMiddleware::class, ZendSessionMiddleware::class, ], 'priority' => 10000, ] ]
中间件将 SessionManager
注入到 Container
中,因此您可以用以下方式获取它
use Zend\Session\Container; Container::getDefaultManager();
我该如何使用 Session Save Handler?
创建时,SessionManagerFactory
会搜索 Container
中的附加键。其中之一是
$saveHandler = $container->get(SaveHandlerInterface::class);
简单来说,如果您希望将保存处理器附加到管理器,您需要编写自己的工厂,并将其分配给服务名称 "Zend\Session\SaveHandler\SaveHandlerInterface",(或将该名称别名分配给您自己的服务)。