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
(管理部分)登录,这最终是我正在尝试做什么。
我设置了两个用户帐户模块——管理员和客户。我当前的设置意味着,如果您登录到管理员,我的应用程序会认为您也以客户身份登录。我决定的解决方案是创建一个会话,其中 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
(管理部分)登录,这最终是我正在尝试做什么。