xorock/expressive-zend-session

为 Zend Expressive 提供的 Zend Session 中间件

0.1.1 2016-07-28 09:34 UTC

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",(或将该名称别名分配给您自己的服务)。