在Symfony应用程序之间共享会话

时间:2017-10-30 14:15:27

标签: php symfony session

我有一个旧的Symfony 2.4应用程序(使用php 5)和标准安全性(form_login防火墙和基于角色的授权)。我们称之为 app1

现在我正在创建一个新的Symfony 3.3应用程序(php 7),我想使用保持会话,以便用户可以无缝地从一个切换到另一个。我们称之为 app2 。用户的身份验证和存储仍将由 app1 管理。

这些应用托管在同一个域,不同的子域中。我设法将 app1 会话文件分享到 app2 (使用Docker卷)。

以下是两个应用的会话配置:

framework:
    session:
        handler_id: session.handler.native_file
        save_path: '%kernel.root_dir%/../var/sessions/%kernel.environment%'
        cookie_domain: myapp.dev

因此,当我登录 app1 时,我也希望被视为已登录 app2
我看到 app2 发送了正确的Cookie,但崩溃说:

  

警告:类__PHP_Incomplete_Class没有反序列化器

它实际上是尝试从会话中反序列化 app1 的用户,但在 app2 中没有相关的User实现。

app2 如何知道我已登录 app1

1 个答案:

答案 0 :(得分:1)

显然,你不能在不共享课程的情况下共享会话文件,考虑到版本之间的差距,这几乎不是一种选择。

在一般情况下,您需要使用单点登录系统之一 - OAuth2,OpenId等。 https://github.com/FriendsOfSymfony/FOSOAuthServerBundle

或者您可以手动执行此操作,这需要更多编码,但可以根据您的需求进行定制,并可能降低运营成本。在这种情况下,您的app1应提供API以通过sessionId返回用户信息,并且app2应实现自定义身份验证以查询此API。 API不应公开,只能用于app2容器。