web-dev-qa-db-ja.com

Cookieが有効になっているかどうかを確認します

JavaScriptとセッションを必要とするページで作業しています。 JavaScriptが無効になっている場合にユーザーに警告するコードが既にあります。次に、セッションIDがCookieに保存されるため、Cookieが無効になっている場合を処理します。

いくつかのアイデアを考えました。

  1. セッションIDをリンクとフォームに埋め込む
  2. Cookieが無効になっている場合、Cookieを有効にする必要があることをユーザーに警告します(Cookieが無効になっているかどうかを検出するためにサポートが必要です)

これにアプローチする最良の方法は何ですか?ありがとう

[〜#〜] edit [〜#〜]

リンクされた記事に基づいて、私は自分のアプローチを思いつき、共有したいと思いました。他の誰かがそれを使用できるかもしれません。 (PHPセッションはPHPSESSIDという名前のCookieに保存されると仮定します)

<div id="form" style="display:none">Content goes here</div>
<noscript>Sorry, but Javascript is required</noscript>
<script type="text/javascript"><!--
if(document.cookie.indexOf('PHPSESSID')!=-1)
   document.getElementById('form').style.display='';
else
   document.write('<p>Sorry, but cookies must be enabled</p>');
--></script>
63
steveo225

JavaScript

JavaScriptでは、すべての主要なブラウザでサポートされている cookieEnabled プロパティを簡単にテストできます。古いブラウザを扱う場合は、Cookieを設定して、存在するかどうかを確認できます。 ( Modernizer から借用):

if (navigator.cookieEnabled) return true;

// set and read cookie
document.cookie = "cookietest=1";
var ret = document.cookie.indexOf("cookietest=") != -1;

// delete cookie
document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";

return ret;

PHP

PHPでは、ページを更新するか、別のスクリプトにリダイレクトする必要があるため、かなり複雑です。ここでは、2つのスクリプトを使用します。

somescript.php

<?php
session_start();
setcookie('foo', 'bar', time()+3600);
header("location: check.php");

check.php

<?php echo (isset($_COOKIE['foo']) && $_COOKIE['foo']=='bar') ? 'enabled' : 'disabled';
72
Sascha Galley

ただし、isset($ _ COOKIE ["cookie"])を使用してCookieが有効になっているかどうかを確認するには、更新する必要があります。私はそれをやっています(クッキーに基づいたセッションで:)

session_start();
$a = session_id();
session_destroy();

session_start();
$b = session_id();
session_destroy();

if ($a == $b)
    echo"Cookies ON";
else
    echo"Cookies OFF";
17
misza

同じページのロードセットでCookieが設定されているかどうかを確認することはできません。リロードページを実行する必要があります。

  • サーバーで実行されるPHP。
  • クライアントでのクッキー。
  • ページの読み込み中にのみサーバーに送信されるクッキー。
  • 作成されたCookieはまだサーバーに送信されておらず、ページの次のロード時にのみ送信されます。
6
drfunjohn

[〜#〜] php [〜#〜]でCookieの可用性をチェックし、[〜#〜 ] ajax [〜#〜]透過リダイレクト。したがって、ページのリロードをトリガーしません。セッションも必要ありません。

クライアント側コード(JavaScript)

function showCookiesMessage(cookiesEnabled) {
    if (cookiesEnabled == 'true')
        alert('Cookies enabled');
    else
        alert('Cookies disabled');
}

$(document).ready(function() {
    var jqxhr = $.get('/cookiesEnabled.php');
    jqxhr.done(showCookiesMessage);
});

(JQuery AJAX呼び出しは純粋なJavaScriptに置き換えることができますAJAX呼び出し)

サーバー側コード(PHP)

if (isset($_COOKIE['cookieCheck'])) {
    echo 'true';
} else {
    if (isset($_GET['reload'])) {
        echo 'false';
    } else {
        setcookie('cookieCheck', '1', time() + 60);
        header('Location: ' . $_SERVER['PHP_SELF'] . '?reload');
        exit();
    }
}

最初にスクリプトが呼び出されると、Cookieが設定され、スクリプトはブラウザに自分自身にリダイレクトするよう指示します。ブラウザはそれを透過的に行います。 AJAX call scope)内で行われるため、ページのリロードは行われません。

2回目に、リダイレクトによって呼び出されたときに、Cookieが受信されると、スクリプトはHTTP 200(文字列「true」)に応答するため、showCookiesMessage関数が呼び出されます。

スクリプトが2度目に呼び出され(「reload」パラメーターで識別される)、Cookieが受信されない場合、HTTP 200にストリング「false」で応答し、showCookiesMessage関数が呼び出されます。

6
zibilico

Ajax呼び出しを行うことができます(:このソリューションにはJQueryが必要です):

example.php

<?php
    setcookie('CookieEnabledTest', 'check', time()+3600);
?>

<script type="text/javascript">

    CookieCheck();

    function CookieCheck()
    {
        $.post
        (
            'ajax.php',
            {
                cmd: 'cookieCheck'
            },
            function (returned_data, status)
            {
                if (status === "success")
                {
                    if (returned_data === "enabled")
                    {
                        alert ("Cookies are activated.");
                    }
                    else
                    {
                        alert ("Cookies are not activated.");
                    }
                }
            }
        );
    }
</script>

ajax.php

$cmd = filter_input(INPUT_POST, "cmd");

if ( isset( $cmd ) && $cmd == "cookieCheck" )
{
    echo (isset($_COOKIE['CookieEnabledTest']) && $_COOKIE['CookieEnabledTest']=='check') ? 'enabled' : 'disabled';
}

その結果、Cookieが有効になっているかどうかを示す警告ボックスが表示されます。もちろん、警告ボックスを表示する必要はありません。ここから、非アクティブ化されたCookieに対処するために他の手順を実行できます。

2
Black

JavaScript

JavaScriptを使用してCookieを作成し、存在するかどうかを確認できます。

//Set a Cookie`
document.cookie="testcookie"`

//Check if cookie exists`
cookiesEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false`

または、 jQuery Cookieプラグイン を使用できます

//Set a Cookie`
$.cookie("testcookie", "testvalue")

//Check if cookie exists`
cookiesEnabled=( $.cookie("testcookie") ) ? true : false`

Php

setcookie("testcookie", "testvalue");

if( isset( $_COOKIE['testcookie'] ) ) {

}

私はそれをテストすることができないので、Phpが動作するかどうかはわかりません。

1
Tomgrohl

これを実現する非常に便利で軽量なJavaScriptプラグインを次に示します。 js-cookie

Cookies.set('cookieName', 'Value');
      setTimeout(function(){
        var cookieValue =  Cookies.get('cookieName');
        if(cookieValue){
           console.log("Test Cookie is set!");
        } else {
           document.write('<p>Sorry, but cookies must be enabled</p>');
        }
        Cookies.remove('cookieName');
      }, 1000);

すべてのブラウザで動作し、任意の文字を受け入れます。

0
Grant

cookieが有効になっているかどうかを簡単に検出できます。

  1. クッキーを設定します。
  2. クッキーを取得する

設定したCookieを取得できる場合はcookieが有効になり、そうでない場合は無効になります。

ところで:Embedding the session id in the links and forms、SEOには悪い。私の意見では、あまり一般的ではありませんは、人々がクッキーを有効にしたくないということです。

0
James.Xu

Cookieはクライアント側であり、PHPを使用して適切にテストすることはできません。これがベースラインであり、すべてのソリューションはこの問題のラップアラウンドです。

クッキーの問題の解決策を探しているなら、あなたは間違った道を進んでいます。 PHPは使用せず、Javascriptなどのクライアント言語を使用します。

PHPを使用してCookieを使用できますか?はい。ただし、設定をPHP 'visible'にするにはリロードする必要があります。

たとえば、ブラウザがプレーンPHPでCookieを設定できるかどうかを確認するテストは可能ですか?唯一の正しい答えは「NO」です。

すでに設定されているCookieを読み取ることができます: 'YES'は、事前定義された$ _COOKIE(PHP-Appを開始する前の設定のコピー)を使用します。

0
Harm