1

私はphp setcookieの奇妙な問題を抱えています。コードを表示させてください

setcookie('aaa', 'aaa', time()+100);  // aaa cookie can be set
if($_POST){
    setcookie('bbb', 'bbb', time()+100);   // bbb cookie can't be set
    echo 'bbb';
}

aaa cookie を設定できます。ただし、bbb cookie は設定できません。
if 条件が true で、bbb が echo であることは 100% 確信しています。

これが実際のコードです。
しかし、最も奇妙なことは、'bbb' Cookie が設定される場合があることです。
したがって、設定に問題があると思います。

Apache(2.2.20) と PHP(5.3.6) を実行しています

編集:<br> このページは、同じドメインと同じディレクトリの iframe で実行しています。

4

6 に答える 6

2

通常、Cookie の設定で問題が発生するのheadersは、 setcookie. あなたがそのif状態にあるときは、そうしてください

if(headers_sent()) 
    throw new Exception('Headers were already sent!!!');

例外が発生した場合、Cookie を設定する前にヘッダーが送信されているため、Cookie はクライアントのブラウザーに送信されません。

于 2012-11-05T03:30:42.100 に答える
1

何をテストしていますか?ポスト配列があること、または値があることは? あなたが望むものを正確に反映するために、条件を明示してください。必要に応じて、empty()、is_null()、===、==、または isset() を使用します。値が投稿されていることを本当に確認したいので、使用してください

if(!empty($_POST)){
  // values were posted, do cookie stuff here....
}

値が posred であるかどうかは気にせず、実際にはアクションが事後使用であったことを知りたい場合:

 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
于 2012-11-05T03:27:44.447 に答える
0

Cookieが保存されるパラメータパスを指定する必要があります。

setcookie('name', 'value', time()+100, '/');

setcookie()

于 2012-11-05T03:33:58.187 に答える
0

条件が false を返していることは確かです。

デバッグの最初のステップは、条件内でエコーすることです。

if($_POST){ echo "テスト"; }

if($var)また、あなたのケースでは isset が設定されていない場合、$_POST抑制しなければならないという通知が生成されるため、代わりに isset を使用します。

その状態を正しく行うためのより良い正確な方法があります。例: isset($var),!isset($var), is_null($var), empty($var)

追加 :

エコーが機能すると言ったので、すべての基本的なハンドルで setcookie を使用することをお勧めします。

if($_POST){ setcookie('bbb', 'bbb', time()+100, '/','yoursite.com'); }

それが何かをする必要があるかどうかはわかりませんが、試してみてください。明らかに、有効期限が切れる前に確認する必要があります(2分未満)

于 2012-11-05T03:41:02.197 に答える
0

Cookie を設定できない理由は、次の場合です。

if($_POST){
    setcookie('bbb', 'bbb', time()+100);   // bbb cookie can't be set
}

戻ってきfalseます。

あなたはおそらく次のことを意味していました:

if(isset($_POST['bbb']) && $_POST['bbb'] !="") {
    setcookie('bbb', 'bbb', time()+100);
}
于 2012-11-05T03:25:39.240 に答える
0
if($_POST) { ... }

POST リクエストを他のリクエスト メソッドと区別して検出するための信頼できる方法ではありません。

代わりに、おそらく次のようなものを使用する必要があります。

if($_SERVER['REQUEST_METHOD'] === 'POST') { ... }
于 2012-11-05T03:26:12.223 に答える