Javascript Ajax$\u对PHP$\u会话的POST调用返回过期信息

Javascript Ajax$\u对PHP$\u会话的POST调用返回过期信息,javascript,php,jquery,ajax,session,Javascript,Php,Jquery,Ajax,Session,我不明白这里发生了什么。我有三页 Home.php Nearmiss.php Reports.php 每个页面的顶部都有下面的代码,并为该页面定义了自己的“thispage”变量 <?php // home.php if ( session_status() == PHP_SESSION_NONE ) { session_start(); } $_SESSION['thispage'] = 'Home'; echo('<div

我不明白这里发生了什么。我有三页

  • Home.php
  • Nearmiss.php
  • Reports.php
每个页面的顶部都有下面的代码,并为该页面定义了自己的“thispage”变量

<?php
    // home.php
    if ( session_status() == PHP_SESSION_NONE ) {
      session_start();
    }
    $_SESSION['thispage'] = 'Home';
    echo('<div id="thispage" hidden>' . $_SESSION['thispage'] . '</div>')
?>
可以使用
app.session()在控制台调用

当我在页面之间单击时,我希望看到其中两个是同步的,但是当我在导航之间单击时将会话记录到控制台时,它们并不匹配,ajax调用通常落后于我实际所在的页面一次单击。例如,我将从“Home.php”转到“Reports.php”,我将得到一个空值(好像$u会话还没有被设置),或者当我明确地导航到Reports.php时,我将得到{thispage:“Home”}

我的导航是通过引导完成的

<!-- Navbar Left -->
<div id="navbar" class="navbar-collapse collapse">
   <ul class="nav navbar-nav">
      <li id="lnkHome"><a href="#">Home</a></li>
      <li id="lnkNearmiss"><a href="#">Nearmiss</a></li>
      <li id="lnkReports"><a href="#">Reports</a></li>
   </ul>
</div>
将我的链接连接到
refresh.navbar()的单击事件函数如下所示

$(document).on('click', '#lnkHome', function() {
    if ( $('#thispage').html() != 'Home' ) {
        // note, references the content of the hidden divs
        refresh.navbar( this );
    }
});
当我点击我的链接时,这就是我看到的。从Home.php开始,我每隔几秒钟按顺序单击Nearmiss.php,然后单击Reports.php,您可以看到,有时它很好,但有时它不好,这可以在最后两次单击中看到

  • 计数20实际上在Nearmiss.php上
  • 计数21实际上在Reports.php上
包括时间戳

为什么Ajax会返回旧信息

环境 -我的局域网上的本地web服务器,延迟不存在。 -按IP地址命中web服务器(无dns/代理疯狂路由) -引导程序3.3.7 -jQuery 3.1.1
-PHP7.1

在我的服务器上,使用PHP7+,session\u status()始终返回PHP\u session\u NONE

<?php
if ( session_status() === PHP_SESSION_NONE ) {
        session_start();
        echo 'Session started<br>';
}
echo 'Session established';
$_SESSION['this'] = 'that';
some page.php

session_start();
$page = basename($_SERVER['REQUEST_URI'],'.php');
// Check if there is a session variable for this page
// If there isn't one, initialize one to zero
if (!isset($_SESSION[$page])) {
        $_SESSION[$page] = 0;
}
$_SESSION[$page]++;
var_dump($_SESSION);  // Debug only
require_once 'session.php';

即使会话已经建立,也需要调用会话_start()。我不会为session_status()而烦恼在每个页面上都被这样调用。之所以这样做是因为有多个php文件具有
session_start()在加载它们的同时抛出一个警告。因为我想成为一名优秀的小程序员,并以“正确的方式”完成它,所以我用这种方式包装它,而不是使用
@session_start()<?php
if ( session_status() === PHP_SESSION_NONE ) {
        session_start();
        echo 'Session started<br>';
}
echo 'Session established';
$_SESSION['this'] = 'that';
session_start();
$page = basename($_SERVER['REQUEST_URI'],'.php');
// Check if there is a session variable for this page
// If there isn't one, initialize one to zero
if (!isset($_SESSION[$page])) {
        $_SESSION[$page] = 0;
}
$_SESSION[$page]++;
var_dump($_SESSION);  // Debug only
require_once 'session.php';