3

ここで何が問題なのか本当にわかりません。

完全に機能する「login.php」というスクリプトがあります。これは AJAX で呼び出され、正常に返されると、ページが更新され、ユーザーがログインします。そのページに Cookie が設定されます。

setcookie("main", $row[0], time() + 3600, "/")

次に、「logout.php」というスクリプトがあります。同じ方法で呼び出されます (AJAX とページの更新)。次の 2 行しかありません。

<?php
    setcookie("main", "", time() - 3600, "/");
    echo "Done";
?>

ページから呼び出してもうまくいかなかったので、ブラウザに logout.php をロードしました。出力は「完了」しましたが、Chrome で Cookie を確認すると、Cookie がまだ「1」($row[0]) に設定されており、login.php で設定された時間に期限切れになることがわかりました。

login.php と logout.php は両方とも、他のすべてのものと同じフォルダーである同じフォルダー (ルート ディレクトリ) にあります。

以前は、これは機能していましたが、私が行った唯一の変更は、Web サイトのタイトル バーを独自のファイル (ルート ディレクトリにあるまま) にすることと、ログアウト ボタンに JavaScript 機能を追加することです。これは単なる AJAX 呼び出しです。およびいくつかの jQuery ホバー効果を追加し、_js フォルダーにある独自のスクリプト ファイルにします。しかし、私は logout.php をまったく変更していないので、そこに直接移動しても機能するはずですよね? setcookie コマンドに何か問題があるのでしょうか、それとも他のどのような問題が原因でしょうか?

編集: -3600 ではなく 100 秒で有効期限が切れるように設定してから、完全に別の Cookie として認識できるように名前を変更してみました。どちらもそれを見せませんでした。クッキーはまったく設定されていません。

編集 2: 最後のコミットに戻しましたが、すべてが再び機能しています。いくつかの新しいファイルを作成してサイトを再編成すると (logout.php はまったく変更されません)、特定のスクリプトが Cookie を作成できなくなる理由がわかりません。

4

1 に答える 1

3

コンテンツがクライアントに送信される前に、Cookie を設定する必要があります。setcookie を呼び出す前に、クライアントに何も送信していないことを確認してください。これは、実際にSet-Cookieはリクエストを通じて返されるヘッダーであるためです。

インクルード ファイル内のわずかなスペースがこれを台無しにする可能性があります。(他のファイルで作業したと言いましたが、含まれているものにデバッグエコーや<?php ... ?>括弧の外側の空白などがないことを確認してください)

一般的な経験則として、PHP コードのみのファイルがある場合は、開始タグ ( <?php) のみを含め、最後のタグを除外します。PHP は引き続き解析および実行されますが、これにより、問題になる可能性があるファイルの末尾の空白が回避されます。例えば

mycodefile.php

<?php

  define('...', ...);

  function ...(){ }

また、クロムの使用について言及しました。Chrome でデバッガーを開き ( ctrl+ shft+ )、[ネットワークi] タブをクリックします。次に、ログアウト呼び出しを見つけて選択し、[ヘッダー] をクリックして、Cookie がクリアされていることを確認します。(同様に、[リソース] をクリックして [ Cookies ]の下を見ると、任意のセットを表示できます。

于 2012-04-17T16:07:02.263 に答える