【问题标题】:Destroy session variables in another application在另一个应用程序中销毁会话变量
【发布时间】:2010-10-08 23:52:45
【问题描述】:

我有两个应用程序,一个是前端应用程序,另一个是后端应用程序。

每个应用程序都有自己的相同用户数据库副本。当用户登录前端应用程序时,我也会同时使用后端应用程序提供的 Web 服务登录后端应用程序。

现在的问题是我可以从前端应用程序中销毁后端会话吗?后端使用 $_Session 超级全局数组来存储所有会话信息。如果是,怎么做?

【问题讨论】:

    标签: php session


    【解决方案1】:

    是的。

    我假设您在正面和背面使用相同的会话 ID 名称。我认为默认是 PHP_SESSID。如果是这种情况,那么所有会话详细信息都将存储在一个位置。

    我还假设前端和后端的域是相同的..如果它不同,那么它将无法工作,因为网络浏览器不会在不同域之间共享会话信息。

    如果您对前端和后端使用不同的会话 ID 名称,那么您将不得不变得棘手。 (两者的会话 ID 都将在请求数据中,您只需加载两个会话并销毁它们。)

    使用:

    session_destroy();
    

    【讨论】:

      【解决方案2】:

      您需要从数据库或文件中删除会话记录(取决于您的系统配置)。

      系统可能默认使用基于文件的会话,您可以使用session_save_path 确定目录。几乎可以肯定,使用存储在数据库中而不是文件系统中的会话要容易得多。

      【讨论】:

        【解决方案3】:

        如果您可以使用后端应用程序公开的 Web 服务来登录用户,为什么不能也使用它来登录用户呢?这样一来,一个应用程序就不必知道另一个应用程序是如何实现会话的(或者有特权可以在那里乱搞)。

        如果这不可能,您必须按照 acrosman 的建议进行操作,并深入研究会话文件或数据库。

        【讨论】:

        • 看起来很奇怪,Web 服务只包括登录,但不包括注销。其实后端不是我写的(是别人写的,我最好别碰),所以我这里别无选择。
        【解决方案4】:

        您如何将前端会话与后端会话关联起来?如果保留前后端会话的会话名称(用作会话ID的唯一值)的映射,则可以轻松找到后端会话(可以保存在文件或数据库中),然后删除会话记录。 使用这一行来找出正在使用什么处理程序来存储会话文件:

        $handler = init_get('session.save_handler');
        

        您可以使用此行找出会话文件的存储位置:

         $path = ini_get('session.save_path');
        

        然后您可以删除会话文件或数据库记录。

        您也可以创建一个Web服务方法来销毁后端会话,然后从前端调用它。

        【讨论】:

          【解决方案5】:

          如果这两个应用程序位于同一域的不同子域中,您可以保存一个 cookie,指示管理员应用程序用户已注销。然后让管理应用程序本身删除会话和“注销”cookie。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-11-16
            • 2013-06-11
            • 1970-01-01
            • 2018-01-21
            • 1970-01-01
            • 2014-05-25
            • 2015-05-12
            相关资源
            最近更新 更多