【问题标题】:PHP Session not Recognized During AJAX RequestAJAX 请求期间无法识别 PHP 会话
【发布时间】:2012-10-11 06:29:15
【问题描述】:

我创建了一个导航栏,管理员可以在其中使用简单的表单添加和删除链接。当提交表单以添加链接时,会进行 AJAX 调用以将新信息添加到 mySQL 数据库中。作为回调函数的一部分,导航栏会使用以下代码行更新以包含新链接:

$('.nav ul').load('/getnav.php');

getnav.php文件如下:

<?php
  require('/connect.php');
  $query = "SELECT id, title, url
            FROM nav
            ORDER BY position ASC";
  $result = $mysqli->query($query);

  while ($data = $result->fetch_assoc()) {
        if (!empty($_SESSION['valid']))
           echo '  <div class="container"><button type="button" name="'.$data['id'].'" class="delButton" alt="Delete"></button></div>
';
  echo '  <a href="'.$data['url'].'" alt="'.$data['title'].'">'.$data['title'].'</a>
';
}
?>

问题是在 AJAX 调用中更新导航栏时,只显示链接,删除按钮消失。 $_SESSION['valid'] 已设置,因此应该执行 if 之后的代码。但是,在进行 AJAX 调用之后缺少的是 if 的代码。我对此的唯一解释是当 getnav.php 被加载到.nav ul 时,会话没有被访问。有谁知道这是为什么?

【问题讨论】:

  • 您是否在 getnav.php 中的任何位置开始了会话?我看到你试图访问一个会话变量,但在会话开始之前你不能
  • 哦,大概就是这样。我在 html 中使用了require('getnav.php'),并且已经在该页面上开始了一个会话,所以我不得不在 getnav.php 中删除它。我必须以某种方式解决这个问题,看看是否是问题所在。
  • 所以我必须在html页面上有session_start(),我必须在页面上有require('/getnav.php'),getnav.php也必须有session_start()。关于如何在不破坏会话的情况下完成此操作的任何想法,并且显然无需在同一页面上调用 session_start() 两次?

标签: php jquery ajax session session-variables


【解决方案1】:

如果没有完整的代码,这很难诊断。

  • 您是否使用 session_start() 开始会话? ?

  • 您可以尝试 var_dump $_SESSION 吗?

【讨论】:

    【解决方案2】:

    我想我可以创建一个没有session_start() 的getnav.php 版本,当我在html 页面上调用require('/getnav.php'); 时将使用它。然后我创建另一个版本的 getnav.php,它确实有 session_start() 并包含原始版本,它将用于 AJAX 调用。

    它应该可以解决问题,尽管它并不是一个真正令人满意的解决方案。欢迎提出更好的建议!

    【讨论】:

      【解决方案3】:

      好吧,我想通了。

      通过在第一个 session_start() 之后使用 session_write_close();,我可以在 getnav.php 中再次使用 session_start() 而不会出现任何错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        • 2023-03-03
        相关资源
        最近更新 更多