2012-02-03 10 views
0

私は推測していませんが、出力先にob_start()を入れずにPHPでクッキーを設定する方法はありますか?ob_startなしで出力後にクッキーを設定する

私の問題は、他にもクッキーを設定する必要があるクラスを開発していることです。今私はそれを使用する人に "あなたが出力を作る前にクラスの新しいインスタンスを作る必要がある"と言うことはできません。だから私は何とかそれをプルすることはできますか?

+0

出力前にクッキーを設定するのはなぜ恥ずかしいですか? – Josh

+0

あなたのコードであれば、それを行うのは不自由ではありません。あなたのクラスを使用したいので、他の開発者に強制するのは難しいことです。 –

+2

クラスがSet-CookieなどのHTTPヘッダーを送信することを文書化している場合、出力が送信される前に使用する必要があるということに間違いはありません。これはまさに 'setcookie'文書が言っていることです。 –

答えて

2

Headers already sent by PHP

専門外の回避策が適用されますが記載されている参照してください。具体的に:

<META HTTP-EQUIV="Set-Cookie" 
CONTENT="cookievalue=xy;expires=Friday, 14-Dec-12 12:12:12 GMT; path=/"> 

またはを使用してdocument.cookieを設定します。

2

できません。クッキーはヘッダーの一部として送信されるので、すでに本文を送信している場合は、それは遅すぎます。出力バッファリングが解決策です。

おそらく、代わりにセッション変数を使用できます。

+0

クッキーを設定できない場合にのみこれを行うでしょう。ありがとう、これは良い提案です:) –

1

これは私のworkroundであり、うまく動作しています。

// Force set cookie now 
$_COOKIE['ref_url'] = $_SERVER['HTTP_REFERER']; 

// Set cookie after refresh site 
setcookie('ref_url', $_SERVER['HTTP_REFERER'], Affiliate::$cookieTime); 

// Diplay $_COOKIE 
var_dump($_COOKIE['ref_url']); 
+0

$ _SERVER ['HTTP_REFERER']が空でないことがあるので、まずそれをテストしてから使用してください。 $ url_referrer =空($ _ SERVER ['HTTP_REFERER'])? '':$ _ SERVER ['HTTP_REFERER']; – fedmich

関連する問題