2017-06-13 248 views
-1

我有一個變量,我想要在頁面之間持久化。我已經嘗試使用POST設置它,並且當這不起作用時,我使用SESSION。然而,在任何一種情況下,當我進入新頁面時,變量都會丟失。PHP會話變量不在頁面之間持久

下面是當變量被設置代​​碼:

$_SESSION['filename'] = $boardName; 
$debug->alert_code_info($_SESSION['filename']); 

而且,正如調試實驗,我用這條線來檢查它是否仍然存在:

$debug->alert_code_info($_SESSION['filename']); 

可以替代的POST在上述內容中的SESSION - 我也嘗試過,但它也不起作用。

爲什麼這些變量不會在頁面間持續存在?

+1

您是否在每個頁面的頂部都有session_start()? – hRdCoder

+0

http://php.net/manual/en/session.examples.basic.php – AbraCadaver

+0

POST與SESSION不同。 POST進入一個頁面,不會一頁一頁地持續。 – developerwjk

回答

0

確保您在頂部的兩個頁面上都有session_start();

是的,$_POST會工作。在這種情況下,請閱讀本文。 Post data in PHP

$ _POST是一個數組,用於將從HTTP POST請求收到的數據存儲到特定頁面。它不像$ _SESSION變量那樣在頁面中持續存在。

+0

這解釋了爲什麼它不會使用SESSION - 有什麼理由不使用POST? –

+0

答案是正確的。你可以使用$ GLOBALS或$ _SESSION來保存php服務器中的數據 –

+1

@HimeshSuthar - '$ GLOBALS'不會持久,它只是一個全局可用的「超全局」數組,通常應該避免。 '$ _SESSION'和'$ _COOKIE'確實以不同的方式堅持下去。 –

0

PHP有「頁面範圍」。這意味着,當一個腳本運行時,所有的變量都會被創建,當腳本完成時,所有的變量都會被處理掉。它沒有持久性。如果沒有輸出緩衝(對於自己來說是一個完整的主題),只要頁面被訪問並且輸出生成,腳本就會完成。這個模型非常接近HTTP的設計方式。

如前所述,您需要一些其他形式的持久性來在頁面之間攜帶變量。會話,數據庫&數據存儲區,緩存,Cookie和共享內存都在php應用程序中經常使用。

哪一個是合適的,需要進一步瞭解爲什麼需要持久性。

你也可以使用url參數的標準網絡機制(自動放置在$ _GET超全局中),POST變量(自動放置在$ _POST超全局中)或cookie(自動放置)中將變量從一個頁面/在$ _COOKIE超全球)。

其中一些連接,在該PHP會話默認情況下利用服務器使用的cookie來識別返回的客戶端。

關於您關於POST變量的具體問題,只要表單針對您的腳本進行POST,POST變量將在$ _POST中可用。一種常用的技術是在存在多表單過程時或者在出現錯誤處理時使用隱藏表單域或設置表單域的值。

需要說明的是,PHP沒有持久性,這與在應用程序服務器下運行的其他一些語言(如帶有J2EE服務器的Java)不同。在J2EE中,可以創建對象,並跨越任意數量的頁面請求位於應用程序服務器內部。在某些實現中,PHP具有一些次要的持久性功能,如數據庫池的情況,但沒有任何語言固有的。

一旦你清楚了頁面範圍,並且基本上沒有超出一個HTTP請求/響應的地方,你的持久性選項應該更清晰。