$\u会话、PHP、iframe,未获取会话变量

$\u会话、PHP、iframe,未获取会话变量,php,session,iframe,Php,Session,Iframe,我正在为仓储创建一个非常简单的基于PHP的程序,但后端流程相当复杂 因此,情况如下: 我有一个登录页面,它指向授权页面,在该页面上它第一次设置了会话\u名称,会话\u开始(),并设置了会话变量 在授权页面之后,它会转到main.php页面,这是一个左侧有菜单(链接)的表,我也做了session\u name()确保session\u start()在所有页面上: session_start()根据通过GET或POST请求传递的会话标识符,或通过cookie传递的会话标识符,创建会话,或恢复当前

我正在为仓储创建一个非常简单的基于PHP的程序,但后端流程相当复杂

因此,情况如下:
  • 我有一个登录页面,它指向授权页面,在该页面上它第一次设置了
    会话\u名称
    会话\u开始()
    ,并设置了会话变量


  • 在授权页面之后,它会转到main.php页面,这是一个左侧有菜单(链接)的表,我也做了
    session\u name()
    确保
    session\u start()
    在所有页面上:

    session_start()根据通过GET或POST请求传递的会话标识符,或通过cookie传递的会话标识符,创建会话,或恢复当前会话

    要控制$\会话的内容,请尝试将代码放入所有iStream页面:

    <?php 
       session_start();
    
       echo '<pre>';
       var_dump($_SESSION);
       echo '</pre>';
    

    确保所有页面上都有
    会话\u start()

    session_start()根据通过GET或POST请求传递的会话标识符,或通过cookie传递的会话标识符,创建会话,或恢复当前会话

    要控制$\会话的内容,请尝试将代码放入所有iStream页面:

    <?php 
       session_start();
    
       echo '<pre>';
       var_dump($_SESSION);
       echo '</pre>';
    
    您是否在iframe和main.php中都在页面顶部使用了session_start()?
    您还需要将session_start()放在iframe的顶部

    您是否在iframe和main.php中都在页面顶部使用了session_start()?
    您还需要将session_start()放在iframe的顶部

    这可能会解决您的问题:


    另外:如果您使用iframe来显示webiste的大部分内容,那么没有什么是简单的。你可能想考虑不使用它们。

    这可能会解决你的问题:


    另外:如果您使用iframe来显示webiste的大部分内容,那么没有什么是简单的。你可能想考虑不使用它们。

    我在PHP网页中有多个iFrimes同样的问题。

    在我的例子中,当使用加载页面时,对PHP端点的一些AJAX调用被调用到www.example.com。如果您与域路径不一致,您可能会遇到会话问题,因为www.example.com的请求从技术上讲是来自子域的,而不是直接从子域发出的。在JavaScript中进行AJAX调用时,始终使用基于PHP的API的相对路径,可以完全避免这个问题

    我用Chrome浏览器检查我的饼干时发现了这种情况。我注意到两个不同的cookie中有不同的PHP会话ID。一个设置为www.example.com,另一个设置为example.com

    如其他一些答案中所述,您始终可以使用以下方法将会话cookie域设置为在所有子域以及主站点上工作:


    默认情况下,PHP将为每个域/子域设置一个新会话。希望这有帮助

    我的一个PHP网页上的多个iFrame也有同样的问题

    在我的例子中,当使用加载页面时,对PHP端点的一些AJAX调用被调用到www.example.com。如果您与域路径不一致,您可能会遇到会话问题,因为www.example.com的请求从技术上讲是来自子域的,而不是直接从子域发出的。在JavaScript中进行AJAX调用时,始终使用基于PHP的API的相对路径,可以完全避免这个问题

    我用Chrome浏览器检查我的饼干时发现了这种情况。我注意到两个不同的cookie中有不同的PHP会话ID。一个设置为www.example.com,另一个设置为example.com

    如其他一些答案中所述,您始终可以使用以下方法将会话cookie域设置为在所有子域以及主站点上工作:


    默认情况下,PHP将为每个域/子域设置一个新会话。希望这有帮助

    @trunks75是的,是的。session_在main.php中启动,假设调用main.php时,iframe中的第一个页面是a.php,我将session_name()和session_start()@trunks75是的。session_在main.php中启动,假设调用main.php时,iframe中的第一个页面是a.php,我确实放置了session_name()和session_start(),是的。session_start在main.php中,假设调用main.php时,iframe中的第一个页面是a.php,我确实将session_name()和session_start()@TimothyTrisnadhama尝试将代码放在所有页面中,您将知道$_会话丢失了什么。是的,我找到了罪魁祸首。。。当我的if语句逻辑有点缺陷时,删除会话肯定是我的错。。哈哈。。谢谢你指出“$\u会话迷路了。”是的,我说了。session_start在main.php中,假设调用main.php时,iframe中的第一个页面是a.php,我确实将session_name()和session_start()@TimothyTrisnadhama尝试将代码放在所有页面中,您将知道$_会话丢失了什么。是的,我找到了罪魁祸首。。。当我的if语句逻辑有点缺陷时,删除会话肯定是我的错。。哈哈。。谢谢你指出“$\u会话丢失”。不,我试过了。我使用的是chrome/ff。。仍然不走运:(不,我试过了…我正在使用chrome/ff。)仍然不走运:(我必须补充一点,它以前没有问题,但这个问题突然发生在两天前。)我必须补充一点,它以前没有问题,但这个问题突然发生在两天前。。