JavaScriptとセッションを必要とするページで作業しています。 JavaScriptが無効になっている場合にユーザーに警告するコードが既にあります。次に、セッションIDが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>
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では、ページを更新するか、別のスクリプトにリダイレクトする必要があるため、かなり複雑です。ここでは、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';
ただし、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";
同じページのロードセットでCookieが設定されているかどうかを確認することはできません。リロードページを実行する必要があります。
[〜#〜] 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
関数が呼び出されます。
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に対処するために他の手順を実行できます。
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が動作するかどうかはわかりません。
これを実現する非常に便利で軽量な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);
すべてのブラウザで動作し、任意の文字を受け入れます。
cookieが有効になっているかどうかを簡単に検出できます。
設定したCookieを取得できる場合はcookie
が有効になり、そうでない場合は無効になります。
ところで:Embedding the session id in the links and forms
、SEOには悪い。私の意見では、あまり一般的ではありませんは、人々がクッキーを有効にしたくないということです。
Cookieはクライアント側であり、PHPを使用して適切にテストすることはできません。これがベースラインであり、すべてのソリューションはこの問題のラップアラウンドです。
クッキーの問題の解決策を探しているなら、あなたは間違った道を進んでいます。 PHPは使用せず、Javascriptなどのクライアント言語を使用します。
PHPを使用してCookieを使用できますか?はい。ただし、設定をPHP 'visible'にするにはリロードする必要があります。
たとえば、ブラウザがプレーンPHPでCookieを設定できるかどうかを確認するテストは可能ですか?唯一の正しい答えは「NO」です。
すでに設定されているCookieを読み取ることができます: 'YES'は、事前定義された$ _COOKIE(PHP-Appを開始する前の設定のコピー)を使用します。