1

PHPでCookieが有効になっているかどうかを検出し、Cookieが有効になっているかどうかを確認するで尋ねられた質問と同じように、 Cookieが有効になっているかどうかを知りたいです。

ただし、これをユーザーに対して可能な限り透過的にしようとしているため、URLに「cookietest=1」パラメーターを追加することには関心がありません。

ユーザーが最初に入力したページにリダイレクトして、「cookietest = 1」GETパラメータの設定を解除し、セッションを通じてCookieが無効になっているかどうかを元のページに通知できることはわかっていますが...

私は現在CodeIgniterを使用しており、CodeIgniterセッションを台無しにしたくないので、PHPセッションを使用してCookieの有効/無効状態を保存しません。

PHPセッションを使用するとCodeIgniterセッションが台無しになるかどうかは実際にはわかりませんが、それでも、GETパラメーターを設定せずにCookieチェックを実行できる独創的な解決策があるかどうかを知りたいと思っています。またはセッションを使用していますか(ただし、リダイレクトは問題ありません)?

アップデート

少し明確にする必要があるようです:

クライアント側でCookieが有効になっているかどうか知りたい。リンクした質問で説明されている方法をすでに試しました。

  1. クッキーを設定します。
  2. チェックCookiePHPページ、または「cookietest=1」GETパラメーターを使用して同じページにリダイレクトします。
  3. Cookieがまだ設定されているかどうかを確認します。yes=>Hoorayの場合、Cookieは機能しています!それ以外の場合=> Boo、Cookieは無効になっています。

私が質問しているのは、GETパラメーターを設定せずにこれを実行できるかどうかです(これはURLに表示されるため)。その質問に対する答えは、「はい、PHPセッションを使用する場合」です。

次の質問は次のとおりです。GETパラメータを設定せずに、PHPセッションを使用せずに実行することは可能ですか?

4

4 に答える 4

1

基本: ユーザーが Cookie を有効にしているかどうかは、1 つの Cookie をクライアントに送信し、クライアントから同じものを受信するまでわかりません。

フローは次のとおりです。

  • クライアントのリクエスト
  • サーバー応答 (+ Cookie)
  • クライアントリクエスト (+ Cookie)

どうやっても避けられない

いくつかのテスト リクエスト (ajax、画像など) を使用して、Cookie が有効になっているかどうかを追跡できます。

たとえば、単純な 1 ピクセルの画像または PHP スクリプトから提供される任意のロゴ画像を使用でき、Cookie が有効かどうかを追跡できます。

したがって、フローは次のようになります。

  • クライアントのリクエスト
  • サーバー応答 HTML (+ Cookie)
  • クライアント リクエスト リモート ページ リソース (js、img、css) (+ Cookie)
  • ページ リソースが要求されたサーバーの応答

何かのようなもの

<?php 
    // domain.com/some.js
    if (isset($_COOKIE['test']))
         $_SESSION['cookies_enabled'] = true;

    echo <<JS
    <someJS code or nothing>
    JS;
 ?>
于 2013-02-21T12:16:10.863 に答える
1

私はこれをかなり前に調べましたが、あらゆる点で欠陥があるように見えました. 私が考慮したことの 1 つは、ユーザーがページを更新したり、[戻る] ボタンでページに戻ったりした場合に、Cookie チェックがどのように機能するかということです。

どうやら、サーバーがクライアントが Cookie を受け入れるかどうかを確認するにはHTTP request、サーバーが Cookie の設定を試みた後に、クライアントが追加のメッセージを送信する必要があります。サーバーは、クライアントが Cookie を受け入れることを示す Cookie ヘッダーを探します (no header =クッキーは受け付けていません)。この追加のリクエストは、別のページへのリダイレクトである可能性があります ( $_GETCookie を設定しようとしたかどうかを示すフラグとして機能するパラメーターを使用した通常のメソッドを参照してください) が、重要なことは、それが別の HTTP リクエストであるということです。私がやったことは、ページ全体を次のようにラップすることでしたHTML FRAMESET

<?php
    setcookie('test', 1, time() + 3600);
    echo '<HTML>
        <HEAD>
            <TITLE>
            </TITLE>
        </HEAD>
        <frameset rows="100%" cols="100%">
            <frame src="next.php">
        </frameset>
    </HTML>';
?>

...さらに、クライアントが Cookie を受け入れた場合、要求に Cookie ヘッダーが含まれることがわかっているHTTP requestため、これを示すフラグとしてパラメーターnext.phpを使用する必要はありません。したがって、次のようになります。$_GETNext.php

<?php
    if(count($_COOKIE) > 0){
        //Set some variable that indicates to the rest of the script that cookies 
        //are enabled.
    }
    else {
        //Set some variable indicating that cookies are disabled
    }
    //Output the rest of the script and HTML code to be displayed
?>

同じことを考えましたが、タグの代わりにタグHTTP requestから追加を送信することを考えましたが、クッキーが設定されているかどうかを画像を介して親スクリプトに示す方法について問題が発生したため、この方法で終了しました. この方法で私が目にする唯一の欠点は、ユーザーがフレーム内を右クリックし、(ページ全体ではなく) フレームのみを更新することを選択した場合、フレームは Cookie が無効になっていると誤って主張することです。他の方法では、それは許容できると思いました。IMGFRAMESET

編集:Javascriptなしでもこれを行うことを指摘したことも付け加えておく必要があります。

于 2013-04-30T09:27:44.970 に答える
0

PHPでCookieが有効になっているかどうかを確認することもできますが、非常に簡単なテストは、Cookieを設定してからそれを読み取ろうとすることです。

あなたがそれをうまく読んだなら、それはうまくいきました。これは、クライアントがCookieを許可していない場合にも通知されます。

于 2013-02-21T12:34:26.500 に答える
0

そのようなことを見つけるためにphp.ini設定を使用します。多分このように:

if (ini_get("session.use_cookies") == 1) {
  print "cookies enabled";
}
于 2013-02-21T12:02:42.470 に答える