1. ホーム
  2. php

[解決済み] Cookieが有効かどうか確認する

2023-06-21 03:20:03

質問

私はjavascriptとセッションを必要とするページで作業しています。私はすでにjavascriptが無効になっている場合、ユーザーに警告するコードを持っています。さて、私はセッションIDがクッキーに保存されているので、クッキーが無効になっているケースを処理したい。

私はちょうど2つのアイデアを考えてきました。

  1. リンクとフォームにセッション ID を埋め込む
  2. クッキーが無効になっている場合、ユーザーにクッキーを有効にしなければならないことを警告する (クッキーが無効になっているかどうかを検出する手助けが必要です)

これにアプローチする最良の方法は何でしょうか?ありがとうございます。

EDIT

リンク先の記事に基づいて、私は自分自身のアプローチを思いついたので、共有しようと思いました。(PHPのセッションが、以下のような名前のクッキーに保存されると仮定します。 PHPSESSID )

<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

JavaScriptでは、単純に cookieEnabled プロパティをテストします。これはすべての主要なブラウザでサポートされています。古いブラウザを扱う場合は、クッキーを設定し、それが存在するかどうかをチェックすることができます。(借用元 モダナイザー ):

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';