0

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

所以情况如下:

  1. 我有一个登录页面,它指向session_name第一次设置的授权页面,session_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”,尝试过(isset($_SESSION))并返回真......所以我不知道我做错了什么......


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

4

4 回答 4

3

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

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

PHP 手册参考

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

<?php 
   session_start();

   echo '<pre>';
   var_dump($_SESSION);
   echo '</pre>';
于 2013-07-26T08:04:37.523 回答
0

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

于 2013-07-26T08:05:07.437 回答
0

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

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

于 2013-07-26T08:05:16.877 回答
0

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

在我的例子中,当页面使用http://example.com加载时,一些对 PHP 端点的 AJAX 调用被发送到 www.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 将为每个域/子域设置一个新会话。希望这可以帮助!

于 2016-10-29T05:34:45.293 回答