$ _SESSION,PHP,iframe,没有得到SESSION变量

时间:2013-07-26 07:58:46

标签: php session iframe

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

所以情况如下:

  1. 我的登录页面指向第一次设置session_name的授权页面,session_start()并设置会话变量。

  2. 在授权页面之后,它进入main.php页面,该页面是一个左侧的表格,用于菜单(链接),我也做了session_name()< - 与一个名称相同的名称从(1)创建,并开始会话。

  3. 在主页面的右侧是用户点击左侧链接时显示页面的iframe。我也做了session_name()< - 与从(1)创建的名称相同的名称,然后开始会话。

  4. 问题:

    main.php没问题,它完全读取会话变量,但是iframe无法获取会话变量(我尝试print_r($_SESSION),并且空了)。我试过var_dump(session_name("abc")),其中“abc”是我在(1)中使用的会话名称,它确实显示“abc”,尝试过(isset($_SESSION))并返回true ...所以我不知道我知道我做错了什么......


    编辑: 对不起伙计们,我想我可能已经找到了罪魁祸首...这是我身边的一个逻辑错误...我有这个条件来检查我创建的每个php页面在用户级别未被授权使用时销毁会话这个当前页面。我的坏...非常感谢你的帮助!

4 个答案:

答案 0 :(得分:3)

确保所有网页上都有session_start()

  

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

请参阅PHP manual reference

要控制$ _SESSION的内容,请尝试将所有ifreame页面放入代码:

<?php 
   session_start();

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这可能会解决您的问题:php session & iframe

此外:如果您使用iframe来显示网站的大部分内容,那么没有什么比这更简单了。您可能想要考虑不使用它们。

答案 3 :(得分:0)

我的一个PHP网页上有多个iframe存在同样的问题。

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

我通过在Chrome中检查我的Cookie找到了这种情况。我注意到两个不同的cookie,其中包含不同的PHP会话ID。一个是为www.example.com设置的,另一个是为example.com设置的

正如其他一些答案中所述,您始终可以使用以下内容将会话Cookie域设置为与您的主站点一起在所有子域中运行:

ini_set("session.cookie_domain", ".domain.com");

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