2013-05-11 109 views
3

我一整天都在爲這個問題而戰。我已經閱讀了許多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?

+0

我認爲它更好地使用cookie。 – jpaugh 2013-05-11 01:22:09

+0

我不知道。餅乾可以消失或被篡改。 – 2013-05-11 01:28:41

+0

@JohnConde有趣。你覺得上述方法是否合理,更重要的是,你會在你的網站上使用它嗎? – wordman 2013-05-11 01:32:07

回答

1

不要從URL傳入會話ID。

http://en.wikipedia.org/wiki/Session_fixation

使用cookies。例如,通過存儲創建者的IP地址,您可以對提供給您的會話ID執行盡力而爲的同源檢查。 Cookie比一個簡單的URL更難以篡改。如果他們「消失」,那麼這意味着您的用戶清除了他們的Cookie,並且不希望您再跟蹤他們的會話。

+0

非常感謝您的提示!在重新閱讀我自己的陳述時,'......適當的過程是什麼才能允許寫入包含SID的絕對URL ......「我可以看到,當我寫這些時,我的想法有多少。我需要更好地闡明事情,因爲我想要做的就是能夠在重定向中使用絕對URL並通過某種方式傳遞SID(而不是通過URL,因爲我曾經看到很多人提到永遠不會這樣做)。因此,我下一步要研究cookie,並閱讀您發佈的那篇令人驚歎的文章。非常感謝! – wordman 2013-05-13 23:40:26