首页 > 解决方案 > 会话中的 PHP 变量没有立即更新

问题描述

在两个不同的 php 文件中,一个在会话中设置变量,另一个从其中读取。在更新第二个文件后立即获取旧值。

我的页面有两个连续的 jQuery ajax 调用。

  1. 从远程服务器获取访问令牌并将其设置在 $_SESSION[token] 中的令牌。如果它已经在会话中找到了一个有效的令牌,则什么也不做。

  2. /makeReq 使用来自 $_SESSION[token] 的令牌调用另一个 api

考虑到它的授予时间和到期时间,我检查会话是否到期。当它过期时,它会在 $_SESSION[token] 中获取并设置新令牌,但在第二次调用中从 $_Session[token] 读取时它会获取旧值。

这是来自单个页面的两个单独的 jQuery ajax 调用。

下面是我的令牌端点的代码。

$current_time = time();

$get_new_token = true;
$request_token = null;

if (isset($_SESSION['token'])) {
    $request_token = $_SESSION['token'];
    $last_token_expire_time = $request_token['grant_time'] + $request_token['expires_in'] -600;
    $get_new_token = $last_token_expire_time < $current_time ? true : false;
}

if ($get_new_token) {
    $request_token=get_token();
    $request_token['grant_time'] = time();
    $_SESSION['token'] = $request_token;
}

下面是我的 makeReq 端点的代码

 $header=array(
            'Content-Type:application/json',
            'authorization:'.$_SESSION["token"],
            'x-app-key:'.APP_KEY
        );

下面是我提出请求的代码

jQuery.ajax({
       url: "'.plugin_dir_url( __FILE__ ) . "token.php".'",
       type: "POST",
       contentType: "application/json",
       success: function (data) {
       }
});
jQuery.ajax({
        url: "'.plugin_dir_url( __FILE__ ) . "makeReq.php".'",
        type:"POST",
        data: {formData: postData},
        success: function(data) {
                 }
});

标签: phpjqueryajaxsession

解决方案


听起来像是缓存问题。尝试消除任何可能干扰缓存的东西。如果您在 wp 专用主机上,例如 WpEngine,请注意他们鼓励根本不要使用会话。

此外,让您只使用基本部分进行编码,以查看您是否会丢失会话。


推荐阅读