2017-01-25 12 views
0

foreachの後にクッキーを保存できません。 foreachの前にクッキーは完全に保存されます。例えばforeachの後にPHPクッキーが保存されない

、これは正常に動作します:

<?php 
setcookie('test', 'This is a test', time() + 3600 , '/', '.mydomain.com');  

if(isset($_COOKIE['test'])){ 
    echo 'The cookie is ' . $_COOKIE['test']; 
} else { 
    echo 'No cookie has been set'; 
} 

foreach ($values as $value){ 
    // CODE 
    echo $value; 
} 
?> 

しかし、このコードで、私はクッキーを保存することはできません。

<?php 
foreach ($values as $value){ 
    // CODE 
    echo $value; 
} 

setcookie('test', 'This is a test', time() + 3600 , '/', '.mydomain.com');  

if(isset($_COOKIE['test'])){ 
    echo 'The cookie is ' . $_COOKIE['test']; 
} else { 
    echo 'No cookie has been set'; 
} 
?> 

任意のアイデア?

+2

'// CODE'とは何ですか?それが何かを出すならば、出力を適切にバッファしない限り、 'Set-Cookie' HTTPヘッダを送ることはできません。 – Phylogenesis

+0

エコー情報を表示する – kurtko

+0

コンテンツに情報を送信すると、HTTPヘッダーを送信するには遅すぎるため、クッキーを設定することはできません。 – Phylogenesis

答えて

0

クッキーは出力前にのみ設定することができます。したがって、foreachループで出力している場合、後でクッキーを設定することはできません。

しかし、最後にこのコードで解決

ob_start(); 
setcookie(...); 
ob_end_flush(); 
+0

'ob_start ' /'ob_end_flush 'は私の例では機能しません – kurtko

+0

最初の 'echo'コールの前にバッファを起動する必要があります。 – Phylogenesis

+0

@Phylogenesisそれは動作します!おかげで多く – kurtko

0

...私は...あなたが実際にこの問題を回避するために、出力バッファを使用することができると信じてだから、次はうまく動作するはずです:

<?php 
ob_start(); 
foreach ($values as $value){ 
    // CODE 
    echo $value; 
} 

setcookie('test', 'This is a test', time() + 3600 , '/', '.mydomain.com'); 
ob_end_flush();  

if(isset($_COOKIE['test'])){ 
    echo 'The cookie is ' . $_COOKIE['test']; 
} else { 
    echo 'No cookie has been set'; 
} 
?> 
+0

素晴らしい!私はあなたが次回はそれが必要ではない方法であなたのコードを構造化するよう助言することができます、それは(ほとんど)常に正しい構造を通して可能です。 – Nytrix

関連する問題