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
<?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()“正确的方法”是创建一个包含会话启动逻辑的文件,并将其要求或包含到需要它的页面中。这实际上是一个非常好的主意,我想我会这样做。。。但是,我不确定这是否会改变我的问题,因为我们绝对知道$\u会话正以这种方式正确启动。
<?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';