ZF2 设置 Zend\AuthenticationService 以使用基于 url 或模块的第二个会话或 cookie

ZF2 Set Zend\AuthenticationService to use second session or cookie based on url or module

我设置了两个用户帐户模块——管理员和客户。我当前的设置意味着,如果您登录到管理员,我的应用程序会认为您也以客户身份登录。我决定的解决方案是创建一个会话,其中 cookie 路径基于管理员 url,即将 cookie_path 设置为 /administrator

在我的管理员 Module.php onBootstrap 功能中我已经包括:

$sessionConfig = new SessionConfig();
$sessionConfig->setOptions(['cookie_path' => '/administrator']);
$sessionManager = new SessionManager($sessionConfig, null, null);
Container::setDefaultManager($sessionManager);

其中设置了cookie路径,但这会影响整个应用程序;即网站的其余部分是无 cookie 的,因为 url 不以 /administrator.

开头

如何设置我的应用程序,使我的管理员模块的 cookie_path 不同于应用程序的其余部分?

[编辑]

我想要的是两个 cookie - 一个用于管理路径,另一个用于应用程序的其余部分。

[编辑]

我正在使用 Zend\Authentication\AuthenticationService 作为 ACL。我想要实现的是让用户登录网站的客户部分并执行操作,然后登录管理面板执行操作。

例如,Magento 会在处理客户帐户登录时设置一个 cookie,然后在处理管理员帐户登录时设置另一个 cookie。

如何设置 Zend\Authentication\AuthenticationService 以使用基于 url / 模块的第二个会话或 cookie?

要在身份验证服务上设置新的命名空间,请执行以下操作:

$auth = $e->getApplication()->getServiceManager()->get('Zend\Authentication\AuthenticationService');
$auth->setStorage(new \Zend\Authentication\Storage\Session($_namespace));

在我的问题中,我想为我的管理区域创建一个不同的会话。在我的抽象控制器中(我正在根据我的 acl 设置检查 $auth 详细信息)我有:

$params = $e->getRouteMatch()->getParams();

/** @var \Zend\Authentication\AuthenticationService */
$auth = $e->getApplication()->getServiceManager()->get('Zend\Authentication\AuthenticationService');
$_namespace = current(explode('\', $params['__NAMESPACE__']));
// Most generic session namespace.
if(in_array($_namespace, ['Customer', 'Application', null])) {
    $_namespace = 'Zend_Auth';
}
$auth->setStorage(new \Zend\Authentication\Storage\Session($_namespace));

这不会创建第二个 cookie,但它确实意味着我可以转到 domain.dev/account(客户部分)并能够独立于 domain.dev/administrator(管理部分)登录,这最终是我正在尝试做什么。