2010-06-10 103 views
2

我怎麼可以設置Cookie在文件的中間,而不會產生「頭已經發出」錯誤?我正在試圖做的是做一個註銷腳本(日誌中的cookie設置工作......這樣奇怪。是不是因爲它是封閉在一個if語句?)但我已經迴應了頁面標題和一些其他的東西在我做出此註銷之前,在頁面的頂部。如何通過PHP在文檔中設置cookie?

謝謝!

+1

誰downvoting的一切,而不發佈評論? – animuson 2010-06-10 07:35:50

+0

*聳聳肩*,我想知道=/ – Sam 2010-06-10 07:37:10

+0

對不起這是一個錯誤。 – 2010-06-10 07:44:18

回答

7

最簡單的方法是使用output buffering直到你準備

<?php 
ob_start(); 
// your code 
ob_end_flush(); 
?> 

輸出緩衝存儲所有輸出的數據,直到緩衝區被刷新到將數據發送到客戶端停止PHP,然後把它在所有一次,因此在start之後的任何回波將保持緩衝直到end_flush,然後發送

+0

謝謝謝謝你謝謝= D! – Sam 2010-06-10 07:34:06

7

嘗試分解你的應用程序分爲兩個部分:

首先,取消設置cookie,那麼你的結果頁面上的重定向用戶。這是一種常用的工作方式。

還嘗試使用了一個框架,你的發展,它會提高你的技能和你的代碼的可維護性。

+3

+1用於重構。在* output *中間設置cookie(當然不是文檔的中間)是無稽之談。 – 2010-06-10 07:33:43

+1

我會研究框架:)。 – Sam 2010-06-10 07:34:48

2

在發送其他任何內容之前發送的標頭中發送Cookie。因此,如果您實際上向客戶端(瀏覽器)「呼應」了某些內容,則您的標題也已發送。

這就是說,你可以緩衝你的輸出,一旦所有的代碼已運行(ob_start()ob_end_flush())發送所有