2

JavaScriptを介してCookieが設定されるまでPHPの実行を遅らせようとしています。以下のコードは、createCookie簡単にするためにJavaScript関数をトリミングしました(関数自体をテストしましたが、機能します)。

<?php
if(!isset($_COOKIE["test"])) {
    ?>
    <script type="text/javascript">
        $(function() {
            // createCookie script
            createCookie("test", 1, 3600);
        });
    </script>
    <?php
    // Reload the page to ensure cookie was set
    if(!isset($_COOKIE["test"])) {
        header("Location: http://localhost/");
    }
}
?>

最初は、なぜこれが機能しないのかわかりませんでしたが、使用した後、jQueryready関数のに実行さmicrotime()れた後のPHPがわかりました。コードを大幅に減らして、答えられるシンプルなバージョンを表示しました。PHPで使用できることはよく知っています。Cookieの要件はクライアント側です。<script>setcookie()

PHPとJavaScriptの混合が正しくないことは理解していますが、これを機能させる方法についてのヘルプはあります(PHPの遅延はありますか?-sleep()スクリプトも遅延するため、試しましたが、機能しませんでした。 )大歓迎です。

4

6 に答える 6

2

他の回答が述べているように、あなたがやろうとしていることを行うことは不可能ではありませんが、クライアントが「Cookieを設定する」要求ごとにサーバーが待機することも簡単ではなく、深刻な悪い考えです

しかし、それは可能です。

  1. PHPコードは<script>、Cookieを設定するためのブロックを記述します。
  2. PHPコードは、セッション変数を監視してアイドルループを開始します。クッキーではありません。実行中のPHPスクリプトのCookieはすでに設定されており、JavaScriptによって変更されることはありません。
  3. #1で記述されたJavaScriptブロックも、サーバーに対してAJAX呼び出しを行う必要があります。呼び出すPHPスクリプトは、気になるCookieを設定するだけでなく、気になるセッション変数#2も設定する必要があります。
  4. セッションを監視している元のスクリプトが起動し、計画どおりに続行する必要があります。

PHPJavaScriptの前に実行されますが、すべてのブラウザーは、PHP(または任意のサーバー側言語)によって生成されたHTML / CSS/JavaScriptコンテンツを段階的にロードします。増分ロードのため、PHPスクリプトは、続行する前にJavaScriptが何かを実行するのを遅らせる可能性があります(上記のとおり)。ただし、JavaScriptリクエストが届かない場合に、JavaScriptが#2のアイドルループを解除するのを待つ時間など、サーバーには多くの問題があります。

これは、標準のWebページの通常の実行フローではありません。これが本当に必要でない限り、おそらくこれを概念実証の答えと考えてください。

于 2012-10-02T03:55:38.197 に答える
1

PHPは、最初にサーバー上で完全に実行されます。次に、最終的なHTML / Javascript/CSS出力をブラウザに送信します。ブラウザはこれを受け取り、Javascriptを実行します。

そのコードでやろうとしていることをするのは基本的に不可能です。PHPとJavascriptは、まったく異なる環境でまったく異なる時間に実行されます。JavascriptがCookieを設定して別のPHPスクリプトを開始したら、サーバーへの別のリクエストを開始する必要があります。Javascriptを使用してリダイレクトするか、AJAXを調べてください。

于 2012-10-02T03:37:30.863 に答える
1

PHPの前にJavaScriptを実行する場合は、JavaScriptを2つのリクエストに分割する必要があります。JavaScriptを1つのリクエストにロードし、Cookieが設定された後にAjaxリクエストを実行できます。すべてのサーバー側コードは、クライアント側コードが実行される前に処理されることに注意してください。

私はしかし尋ねなければなりません..なぜあなたはそれをこのようにしたいのですか?何を達成しようとしていますか?

于 2012-10-02T03:38:12.407 に答える
1

クッキーはPHPで設定できますsetcookie

setcookie("test",1,time()+3600);
于 2012-10-02T03:45:15.680 に答える
0

PHPはサーバー側で実行され、JSはクライアント側で実行されます。ブラウザからの単一のGETリクエストでは、PHPは常にJSの前に実行されます。

于 2012-10-02T03:37:49.737 に答える
0

これは、単一のリクエスト内では実行できません。PHPが最初に実行され、次にJavaScriptが実行されます。Cookieはヘッダーを介して送信され、PHPが実行されるまでにすでに送信されているため、増分読み込みでも役に立ちません。

ただし、JavaScriptにCookieを設定させてから、を使用してページを再読み込みすることができますlocation.reload()。PHPは、次のようにJavaScriptを印刷するだけで済みます。

<?php
if(!isset($_COOKIE["test"])) {
    ?>
    <script type="text/javascript">
        $(function() {
            // createCookie script
            createCookie("test", 1, 3600);
            // reload the page, which would send the cookie at the next request
            location.reload();
        });
    </script>
    <?php
    // stop execution and wait for JavaScript to call you again.
    exit;
}
?>
于 2012-10-02T03:43:36.277 に答える