【问题标题】:Session does not get updated value in php会话在 php 中没有得到更新的值
【发布时间】:2014-10-31 01:19:03
【问题描述】:

我正在调用 firstpage.php 它更改 $_SESSION['Progress'] 会话值。但是当我调用progress.php 来获取$_SESSION['Progress'] 会话值时,它会保持给出“1”值。 progress.php 没有给出更新的值。我手动检查了 firstpage.php 工作正常。但我不知道为什么 progress.php 没有给出更新的值。

var progressInterval;
  $.ajax({
          type: "POST",
          url: "firstpage.php",
          cache: false,
          data: {
            first: first
          },
          success:function(result)
          {
            if(progressInterval) {
                clearInterval(progressInterval); //if I remove this session still show "1" output
            }
            alert(result); // print session value. ex:- value- 1,2,3,4,5,6,7,8,Final=8
          }
  });

  progressInterval = setInterval(function(){
      $.ajax({
          url:'progress.php',
          type: 'get',
          data: {"name":"Progress"},
          dataType:'json',
          success: function(data) {
              $('.output').text((parseInt(data.progress))+"%"); // KEEP SHOWING 1% (why value does not change?????)
          },
          error:function(err){
              console.log(err);
          }
      });

  }, 1000);

首页.php

session_start();
$_SESSION['Progress'] = 0;
  $data=0;
  $progress=$_SESSION['Progress'];
  foreach($album_data as $row) //assume foreach works fine.
    {
        $progress++;
        $_SESSION['Progress'] = $progress;
        $data.=$progress.",";
        session_write_close();
    }
  }
  echo $data." final=".$_SESSION['Progress']; //output-1,2,3,4,5,6,7,8 final=8

progress.php 代码

session_start();

getProgress($_GET['name']);

function getProgress($filename) {
    if (isset($_SESSION[$filename])) {
        echo json_encode(array("progress" => $_SESSION[$filename]));
    } else {
        echo json_encode(array("progress" => 0));
    }
}

【问题讨论】:

  • 告诉我们你是如何在firstpage.php中设置会话的

标签: php ajax session


【解决方案1】:

我在 firstpage.php 中进行了更改。现在可以使用了。

session_start();
$_SESSION['Progress'] = 0;
 $data=0;
  $progress=$_SESSION['Progress'];
  foreach($album_data as $row) //assume foreach works fine.
   {
    session_start(); //we need to start session because we closed the session using session_write_close(); 
    $progress++;
    $_SESSION['Progress'] = $progress;
    $data.=$progress.",";
    session_write_close(); // need to close because we getting the value uses at progress.php. 
   }
 }
 session_start();
 echo $data." final=".$_SESSION['Progress']; //output-1,2,3,4,5,6,7,8 final=8

【讨论】:

  • 不,我们每次都需要开始
【解决方案2】:

session_write_close(); 结束当前会话并存储会话数据。

在循环的每次迭代中,您都需要使用 session_start(); 重新启动会话

【讨论】:

  • 对不起,我已经在起始行添加了session_start(),但我忘了在代码中进行豪宅。在 firstpage.php 会话中工作正常。它还给出了输出。但我没有从progress.php页面获得
  • 但是你在用$filename做什么我没有得到那个部分?
  • 没什么,但我只是想获得$_SESSION['Progress'] 的值。我的事情应该是给的。
  • 如果我移除 clearInterval(progressInterval); 我仍然给我输出 1
  • @user3730347 删除该行session_write_close();
【解决方案3】:

你可以试试这个。你有 index.php 获取 $_SESSION['Progress'] 的值,这是 index.php 包含的内容

index.php

<html>
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script>
        var progressInterval;

        progressInterval = setInterval( function(){
        $.ajax({
              url: "progress.php",
              data: { name: 1 }
            }).done(function(msg) {
               $("#test1").text(msg);
            });
        }, 2000);
    </script>
</head>
<body>
    <p id='test1' class='output'></p>
</body>
</html>

它将每 2 秒获取所有 $_SESSION['Progress']

这里 progress.php 包含什么

session_start();
getProgress($_GET['name']);
function getProgress($filename) {
    if (isset($_SESSION['Progress'])) {
        echo json_encode(array("progress" => $_SESSION['Progress']));
    } else {
        echo json_encode(array("progress" => 0));
    }
}

然后是 firstpage.php

session_start();
  $_SESSION['Progress'] = 0;
  /*
  $data=0;
  $progress=$_SESSION['Progress'];
  foreach($album_data as $row) //assume foreach works fine.
    {
        $progress++;
        $_SESSION['Progress'] = $progress;
        $data.=$progress.",";
        session_write_close();
    }
  }
  echo $data." final=".$_SESSION['Progress']; //output-1,2,3,4,5,6,7,8 final=8
  */

firstpage.php 仅用于更改 $_SESSION['Progress'] 值。

尝试打开 2 个浏览器窗口。一个用于 index.php,一个用于 firstpage.php。

保持 index.php 打开,同时将 firstpage.php 中的 $_SESSION['Progress'] 的值更改为 2(例如)并重新加载页面 firstpage.php。然后,你会发现$_SESSION['Progress']的值在index.php更改为{"progress":2}中的ajax请求返回

所以我认为您在执行 ajax 请求时遇到了问题。

【讨论】:

  • 我认为问题是session lockingin firstpage.php 页面。我尝试检查元素。当 firstpage.php 进程完成然后 process.php 返回输出时,progress.php 的状态为“待处理”
  • 我请客。我认为您应该延长获取会话请求间隔,并确保首先使用 window.onload 或 document.onload 调用设置会话请求来调用获取会话 ajax 请求。
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
相关资源
最近更新 更多