多个子域的{Zend 2身份验证服务会话

时间:2015-06-04 13:00:13

标签: php session authentication zend-framework2

我有2个子域,我正在尝试通过子域验证用户。

场景: 子域名:abc.example.com,xyz.example.com

用户可以从两个域中的任何一个登录(登录表单)。 身份验证是从abc.example.com完成的(即请求仅发送到abc.example.com)。

当用户从xyz提交表单时,会向abc发送请求并完成身份验证。成功登录后,页面将重定向回xyz。

现在xyz在xyz上创建一个会话,一切正常,但abc似乎无法在身份验证期间找到已创建的会话。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用2个身份验证存储执行此操作,每个子域一个

以这种方式在Module.config中创建2个身份验证存储和1个身份验证服务

public function getServiceConfig() {
    $subDomainAbc = "abc.example.com";
    $subDomainXyz = "xyz.example.com";
    $address = ''; // Get the correct address here

    $authenticationService = function($sm){
        // Declare and return the authentication service here
    };

    if($address === $subDomainAbc) {
        return array(
            'factories' => array(
                'AuthenticationStorage' => function(){
                    return new AuthenticationStorageAbc("ABCAuthNamespace");
                },
                'AuthenticationService' => $authenticationService   
            )
        );
    } else {
          return array(
            'factories' => array(
                'AuthenticationStorage' => function(){
                    return new AuthenticationStorageXyz("XYZAuthNamespace");
                },
                'AuthenticationService' => $authenticationService   
            )
        );
    }
}

验证存储现在将相应地返回正确的会话服务到子域。

希望它有助于某人