我一整天都在爲這個問題而戰。我已經閱讀了許多SO和論壇帖子,其他許多人也有同樣的問題,帖子跨越了幾年。重定向後會話變量消失
我的問題是我寫的允許數據庫數據非常基本改動的後端系統的一部分,新條目可以被添加,更新或刪除。很標準的問題的東西。爲了簡單起見,每個函數,插入,更新,刪除和數據庫內容的整體視圖都在單獨的頁面上(insert.php,update.php,depete.php)。
當添加一個新的條目,編輯或刪除一個現有的條目,重定向後跟隨,將用戶回到視圖,php頁面顯示更新的數據列表。問題是,重定向不起作用。會話變量在重定向期間被丟棄,由於我的代碼,這個變量拋出用戶返回登錄頁面。
這裏是我的代碼:
if ($done || !isset($_GET['client_id'])) {
header('Location: http://website.com/admin/view.php');
exit;
}
非常感謝大家! 它檢查以確保更新的數據已發佈,如果一切正常,則重定向到view.php。
但它不會,是的,我的網頁都開始必要的<?php session_start(); ?>
。於是網上淘了幾個小時之後,我遇到PHP手冊九年舊條目來了,我覺得是值得分享:
http://www.php.net/manual/en/ref.session.php#37555
在這裏面,海報中提到,「要知道的事實上,絕對URL不會被自動重寫爲包含SID。「
他建議,」跳過'http:'完成了這項工作。「所以我把它從我的代碼中刪除,因此:
if ($done || !isset($_GET['client_id'])) {
header('Location: view.php');
exit;
}
它很有效。這個話題對我們很多人來說都是一個頭疼的人,我想分享它的價值。然而,我也有一個問題,那就是,正確的過程是什麼才能允許寫入一個包含SID的絕對URL?
我認爲它更好地使用cookie。 – jpaugh 2013-05-11 01:22:09
我不知道。餅乾可以消失或被篡改。 – 2013-05-11 01:28:41
@JohnConde有趣。你覺得上述方法是否合理,更重要的是,你會在你的網站上使用它嗎? – wordman 2013-05-11 01:32:07