0

こんにちは、私は Cookie を設定しようとしています。

    setcookie("ms_il_cart_save_for_3", "cName", time()+3600);
    header("Location: store-cart3.php");
    exit;

store-cart3.php に移動すると、Cookie が設定されていませんでした Cookie の var ダンプが NULL を示しています。今日、私はこのコードに関係のない変更を更新しました。これまでのところ、これが機能していることはわかっています。このコードの前に HTML で何も出力されず、ファイルのエンコーディングを変更したとは思いません。セキュリティ対策?(私は今日このコードを約100回実行しました)

これはかなり迷惑なアイデアですか?

4

4 に答える 4

1

Cookie の設定は、ヘッダーがまだ送信されていない場合にのみ機能します。すでにヘッダーまたはコンテンツをクライアントに送信している場合、setcookie は機能しません。Cookie を設定するには、クライアントが Cookie を受け入れる必要もあります。そうでない場合は、システムが機能するために Cookie を受け入れる必要があることをクライアントに通知する以外に、できることはありません。

編集: 投稿で、無関係なコードに変更を加えたが、setcookie が機能しなくなったと述べました。関係のないコードにエラーが含まれている可能性があり、それが原因で PHP がエラー メッセージをブラウザーにエコーします。これにより、すべてのヘッダーが送信され、この時点以降に行われた setcookie 呼び出しは機能しなくなります。

于 2011-07-20T08:29:43.547 に答える
0

ブラウザ固有ですか?Blackberry ブラウザーはリダイレクト応答で返された Cookie を処理しないことに気付きましたが、MSIE と Firefox は喜んで処理します。

リダイレクトは setcookie の後であるため、ヘッダーが既に送信されているかどうかは明らかだと思います。しかし、Cookie がまだ応答ヘッダーにあることを確認しましたか? (つまり、HTTPHeaders、firebug、tamperdata、fiddler、wireshark)

そうでない場合は、setcookie() と header() 呼び出しの順序を入れ替えてみてください。

于 2011-07-20T09:34:42.297 に答える
0

この方法でリダイレクトするページに Cookie を設定する場合は、 への呼び出しの後に Cookie を設定する必要がありますheader()

したがって、例は次のようにする必要があります。

header("Location: store-cart3.php");
setcookie("ms_il_cart_save_for_3", "cName", time()+3600);
exit;
于 2011-07-20T08:34:28.947 に答える
0

おそらく、関数とヘッダーが既に送信されていることを呼び出す前に、いくつかのコンテンツを出力しました。

スクリプトの開始時に出力バッファリングを開始してみてくださいob_start()

また、ファイルの警告/通知と、テキスト ファイルの先頭にある BOM utf-8 バイトを確認してください。これらはテキスト エディターには表示されません。

于 2011-07-20T09:04:52.950 に答える