2013-06-19 71 views
3

我需要一些幫助,當涉及到使用$_GET,$_SESSIONXMLHttpRequest。我已經建造了一個最小工作實例來說明這個問題:

的index.php

<?php 
    session_start();  
    $_SESSION['current'] = 2; 
    ?> 

    <html> 
     <head>   
      <script type="text/javascript" src="jquery.js"></script> 
      <script type="text/javascript" src="ajax.js"></script>  
     </head> 
     <body> 
      <div id="content"><?php include('table.php'); ?></div>  
     </body> 
    </html> 

table.php

<?php 
if(isset($_GET['current'])) 
{ 
    $_SESSION['current'] = $_GET['current']; 
} 

$current = $_SESSION['current']; 

echo '<h1>Table Value = '.$current.'<br>'; 

?> 

browse.php

<?php 

if(isset($_GET['current'])) 
{ 

    $_SESSION['current'] = $_GET['current']; 
} 

$current = $_SESSION['current']; 

echo '<h1>Browse value = '.$current.'<br>'; 
print "<input type=\"button\" value=\"Click here\" onclick=\"myfunc($current)\"/>&nbsp;"; 

?> 

ajax.js

function myfunc(input) { 
    xmlhttp = new XMLHttpRequest(); 

    xmlhttp.open("GET","table.php?current=" + (input+1),false); 
    xmlhttp.send(); 
    document.getElementById("content").innerHTML=xmlhttp.responseText;  


    xmlhttp.open("GET","browse.php",false); 
    xmlhttp.send(); 
    document.getElementById("target").innerHTML=xmlhttp.responseText;  
} 

我用Firebug控制檯跟蹤發生了什麼的。首先讓我指出,我將async參數設置爲false,因爲我的服務器請求非常小。當我點擊按鈕myfunc(2)被執行並且它從服務器請求./table.php?current=3./browser.php

我的想法是,由於我首先請求./table.php?current=3,會話變量$_SESSION['current']將被設置爲3.但是,當請求browse.php時,會話變量未設置!這是在我按一下按鈕,一旦發生了什麼:

foo

任何想法可能是錯誤的?在此先感謝:)

+2

您必須在** EVERY **腳本中使用'session_start()'來執行會話操作。由於你的表/瀏覽腳本沒有它,所以$ _SESSION將只是默認的空數組,在腳本終止時,沒有賦值給數組的值將被php保留。 –

回答

2

您需要在browser.php開頭添加session_start();。 (正如馬克B評論你的問題)。

如果您不能確定哪個腳本中被包括在已經開始的會話另一個腳本,你可以在每一個PHP腳本的開頭使用

if(!session_id()) session_start(); 

要你的推理:

我將async參數設置爲false,因爲我的服務器要求是如此之小。

的問題是可以(在某些情況下,或永遠)爲顯著時間凍結你的頁面的網絡通信,響應的,無論大小。