2014-09-06 3 views
2

Я вызываю firstpage.php, меняя значение $ _SESSION ['Progress']. Но когда я вызываю progress.php для получения значения сессии $ _SESSION ['Progress'], он сохраняет значение «1». progress.php не дает обновленного значения. Я проверил вручную firstpage.php, работая нормально. но я не знаю, почему progress.php не дает обновленного значения.Сессия не обновляется в 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); 

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 

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)); 
    } 
} 
+0

показать нам, как вы установили сессию в 'firstpage.php' – meda

ответ

2

session_write_close(); заканчивается на текущей сессии и хранить данные сессии.

На каждой итерации цикла вам необходимо будет перезапустить сессию, используя session_start();

+0

К сожалению, я уже добавил' session_start() 'в стартовой линии, но я забыл особняк в коде. в сеансе firstpage.php отлично работает. он также дает выход. но я не получил от progress.php страницы –

+0

, но что вы делаете с '$ filename', я не получил эту часть? – meda

+0

ничего, но я просто пытаюсь получить значение '$ _SESSION ['Progress']'. И я должен это дать. –

0

Вы migh попробовать это. у вас есть 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> 

он будет получать все $_SESSION['Progress'] каждые 2 секунды.

А вот то, что 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 открытым, в то время как вы изменяете значение $_SESSION['Progress'] в firstpage.php до 2 (например) и перезагружаете страницу firstpage.php. Затем, вы обнаружили значение $_SESSION['Progress'], которое возвращение АЯКС запроса в index.php изменения в {"progress":2}

Так что ваша проблема, я думаю о выполнении запроса AJAX.

+0

Я думаю, что проблема заключается в 'session locking'in firstpage.php странице. Я пытаюсь проверить элемент. И статус progress.php« ожидает », когда первая страница .php process done then process.php return output –

+0

I Guest so. Думаю, вам следует расширить интервал запроса на получение сеанса и убедиться, что сначала задан запрос сеанса, используя window.onload или document.onload, чтобы вызвать запрос сеанса ajax. – Dody

2

I changed in 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 
+0

oh man Я сказал вам добавить сеанс start lol – meda

+0

Нет, нам нужно начинать каждый раз –

Смежные вопросы