PHP会话_start上的服务器冻结(同一域上的多个站点)


Server freeze on PHP session_start (multiple sites on same domain)

我在从服务器本身执行session_start()时遇到问题。

整个问题是我有一个WordPress和eShop。两者都在同一个域上工作并且具有相同的会话。当我从eShop转到WordPress时,会话是可用的,但我需要从eShop加载一些组件才能加载到WordPress中。

由于eShop上有Smarty引擎,我需要通过file_get_contents获取模板,而且这不是请求,我需要指定eShop的会话ID来识别我。

但是,当我调用具有指定ID的函数时,请求会冻结,有什么想法吗?

问题出在安全处理程序上。当我将会话ID提取到eShop时,它必须创建一个具有指定ID的新会话,但该会话仍然被WordPress打开,这导致在尝试访问eShop中的会话文件时服务器上的文件锁定和冻结。

因此,我采用了以下解决方案:您需要关闭会话文件,以便eShop可以通过使用session_write_close开始使用会话文件。

<?php
    // close session file
    session_write_close();
    // build the request url with session_id
    $load_basket = $this->_eshop_url .'&force_session='.session_id();
    // fetch the output of eShop template
    echo file_get_contents($load_basket);
?>