$_SESSION,PHP,iframe,未获取SESSION变量


$_SESSION, PHP, iframe, not getting the SESSION variables

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

因此,情况如下:

  1. 我有一个登录页面,它指向授权页面,在那里它第一次设置session_namesession_start()并设置会话变量。

  2. 在授权页面之后,它转到main.php页面,这是一个左侧的菜单(链接)表,我也做了session_name()<--与从(1)创建的名称相同,然后启动会话。

  3. 主页右侧是iframe,当用户单击左侧的链接时,它会显示页面。我还做了session_name()<--与从(1)创建的名称相同,然后启动会话。

问题:

main.php还可以,它可以完美地读取会话变量,但iframe无法获取会话变量(我尝试print_r($_SESSION),结果为空)。我尝试了var_dump(session_name("abc"));abc";是我在(1)中使用的会话名称;abc";,tryd(isset($_SESSION))并返回true。。。所以我不知道我做错了什么。。。


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

确保session_start()在所有页面上:

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

参见PHP手册参考

要控制$_SESSION的内容,请尝试在所有iframe页面中放入以下代码:

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

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

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

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

我在一个PHP网页上使用多个iframe时遇到了同样的问题。

在我的例子中,当使用http://example.com.如果您与域路径不一致,您可能会遇到会话问题,因为从技术上讲,来自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默认情况下会为每个域/子域设置一个新会话。希望这能有所帮助!