2011-12-20 43 views
1

有沒有辦法將$ _POST數據數組合併到$ _SESSION數組中。我希望它保持當前數據不變,只插入新數據或更新已更改的部分。我試過array_merge,但它沒有做我想要的。

感謝

+3

那你試試用'array_merge'?它完全符合你的要求。 – ceejayoz 2011-12-20 03:03:28

+0

如果'array_merge()'沒有做你想要的,你可能需要拿出一個例子。你的輸入是什麼,你期望輸出什麼?把事情簡單化。 – kba 2011-12-20 03:07:43

+0

我希望您瞭解在$ _SESSION中保存$ _POST變量時所涉及的安全風險,而無需事先篩選$ _POST數據。 – stillstanding 2011-12-20 04:52:48

回答

1

你能不能嘗試創建一個$ _SESSION [「postVars」]變量,然後存儲在那裏的$ _ POST信息。我不會嘗試將$ _SESSION與$ _POST合併,這將在稍後的跟蹤中對您的應用程序產生安全影響。話雖如此,我還要小心保存在$ _POST全局中出現的任何內容。無論如何,我希望我的建議有所幫助。

1

不是一個好主意,試圖合併$_POST$_SESSION。相反,這樣做:

$_SESSION['lastPost']=$_POST; 

或者,如果你想更新的變化,比較$_POST$_SESSION['lastPost']並分配給受影響的密鑰的任何差異,如

$_SESSION['lastPost']['thisKeysValueChanged'] = $_POST['thisKeysValueChanged']; 
1
foreach ($_POST as $key => $val) { 
    if (!isset($_SESSION[$key]) || ($val !== $_SESSION[$key])) { 
     $_SESSION[$key] = $val; 
    } 
} 

在簡而言之,如果當前正在考慮的POST鍵值在SESSION陣列中沒有相應的條目,或者這兩個值不同,則將POST數據複製到SESSION。

但是,請注意,這將允許惡意用戶覆蓋整個會話數組。如果他們知道你保留了一個$_SESSION['is_admin']標誌,他們可以用適當的值對它進行平凡的覆蓋並給予他們超級用戶的權力。

直接+盲目地將用戶提供的數據轉移到會話變量中永遠不是一個好主意。

0

array_merge確實有效,但它不修改數組,它返回合併數組。你想要做的是:

$_SESSION = array_merge($_SESSION, $_POST); 

(安全警告如上:)