2013-04-02 102 views
0

我有一個頁面,我發佈了一個python腳本中的數據。我正在處理這些數據,將數據存儲到SQL中。我想存儲這個帖子請求的時間。 請注意,發佈請求是連續進行的。所以會話變量不斷變化。那麼這裏是覺得─PHP會話變量沒有在其他頁面上顯示

<?PHP 
session_start(); 
include 'db.inc.php'; 

if(isset($_POST['data']){ 
$data_decode = (array)json_decode($_POST['data']); 
$data_var1 = $data_decode['var1']; 
$data_var2 = $data_decode['var2']; 
$data_var3 = $data_decode['var3']; 
$date = date('Y-m-d H:i:s'); 
$_SESSION['time'] = $date; //Set the session with current time 
$sql = "UPDATE `table` SET row1=$data_var1, row2=$data_var2 WHERE row3=$data_var3"; 
$result = mysqli_query($db,$link) or die('Table could not be updated'); 
echo "Following data inserted: row1=$data_var1, row2=$data_var2, at $_SESSION['time']"; //Echoing the data and time as expected 
?> 

小碼現在,我在同一個域,這使得Ajax請求,並獲取了數據每秒鐘從我剛插入的數據到SQL表中的另一頁。因此,這裏是整個場景 - 客戶端python腳本向網頁發出發佈請求,網頁用接收到的數據更新sql,並設置會話變量。另一頁同時使用ajax獲取數據並顯示它。

現在我打電話會話變量的另一個頁面上shown-

<?php 
session_start(); 
if(isset($_SESSION['time']){ echo $_SESSION['time']; } //Didn't echoes anything 
?> 

我以前<?php print_r($_SESSION) ?>檢查會話變量是否設置與否,它呼應「陣列()」,這意味着我的會議變量未設置。所以我的問題是,我做錯了什麼,我該如何糾正?

+1

調用'在session_start();'在每一頁上 – Class

+0

對不起,我忘了提,我打電話它的每一個 – ashutosh

+1

頁面上你有驗證數據是越來越貼?自會話時間基於 如果(isset($ _ POST),也許它沒有被設置 –

回答

0

我試圖重建其組件在您的方案行事。

所以首先你要提到一個Python腳本。它如何與PHP一起工作?它實際上是發出一個HTTP請求本身,還是隻發送HTML到瀏覽器然後去PHP?如果Python的行爲類似於HTTP客戶端,這很重要,因爲PHP會話使用cookie,因此您的Python腳本必須能夠接受「Set-cookie」HTTP標頭並對其進行處理,特別是在稍後的請求上發送它。

第二個信息是有一些Ajax正在進行。這指向一個瀏覽器和一些Javascript作爲客戶端,並且這個組合顯然能夠接受由PHP設置的任何cookie。

但瀏覽器和Python腳本如何通信?瀏覽器如何知道Python腳本從PHP獲取哪個cookie,以便可以加載會話數據?

我希望你看到你的方法中的漏洞。將數據從Python發佈到數據庫是一回事,節省這個事件的時間可能是全局信息(上次數據庫更新的日期),而不是會話信息(每個Python客戶端都不相同)。因此,會話是存儲的錯誤位置。另一個障礙是您的Ajax客戶端無法從您的Python客戶端共享會話ID!會話的最後一個缺點:如果它能夠工作,則會不斷干擾這兩個請求,因爲會話使用鎖定來防止兩個請求刪除其他每個數據。這尤其糟糕,因爲掛起的Ajax請求可能會阻止Python腳本寫入數據庫,反之亦然。

找到一種方法在您的服務器上存儲全局信息。你已經有了一個數據庫,爲什麼不使用它呢?

4

確保在每一頁的開頭調用session_start() ...

你忘了聲明之後的分號。

$_SESSION['time'] = $date 

應該

$_SESSION['time'] = $date; 
+0

對不起,我複查。這是這裏的錯誤輸入。但是,這一個也讓我沒有成功 – ashutosh

+0

有一定是有什麼不對的地方......從我所知道的情況來看,現在一切都很正常 – brbcoding

+0

我也這麼認爲,也許是因爲我使用了一個客戶端腳本, bpage,因此它僅爲該部分設置會話變量「SET」。也許別的事情正在發生。但無論如何,我會做這件事。我會看到另一種方式。我們是程序員。 – ashutosh

1

你忘了在session_start()

<?php 
session_start(); 
if(isset($_SESSION['time']){ echo $_SESSION['time']; } //Didn't echoes anything 
?> 
+0

我編輯了我的答案。我忘了提到,我已經做了你告訴我的事情 – ashutosh

相關問題