2016-05-26 7 views
1

私は、クッキーが有効かどうかを検出するために次のコードを使用していますが、クッキーを許可するようにブラウザが設定されていても、それが成功していないことが最近発見されました。処理中にクッキーに頼るかどうかの簡単なチェックです。PHPのsetcookie()に値が必要なことがありますか?

最近、PHP 5.6.21に移行しましたが、current setCookie() documentationはsetcookieのアプローチを変更することについては何も言及していませんが、何も指定しなければ空白の値がデフォルトです。また、PHPのバージョン5.6.10では動作が異なります。

ここにはanother questionと書かれていますが、この類似の問題については、使用されているPHPのバージョンについては言及していません。ドキュメントの信用へ

、クッキーを設定するすべての例は、(削除部を除く)の値を渡し、ここでは、空白の受け渡しについての注意です:

値引数が空の文字列、またはFALSEの場合、および他のすべての引数がをいったんsetcookieする前の呼び出しと一致、その後、指定された名前のクッキーがリモートクライアントから削除されます[重点鉱山]

ことの私の解釈は、クッキーがない場合ということですが存在する(その名前のsetcookieへの事前の呼び出しはありません)を作成する必要があります。

コード:valueパラメータが与えられたとき

# Before any html is output: 
function cookiesEnabled(){ 
    if(isset($_COOKIE["cookiesEnabled"])){ 
     return true; 
    }else{ 
     if(isset($_GET["reloaded"])){ 
      return false; 
     }else{ 
      setcookie("cookiesEnabled" /*,"ANY_VALUE_FIXES"*/); 
      $query = ""; 
      if($_SERVER["QUERY_STRING"]){ 
       $query = "&".$_SERVER["QUERY_STRING"]; 
      } 
      header("Location: ?reloaded=1".$query); 
      exit(); 
     } 
    } 
} 
# Check prior to any HTML content being echoed 
if(!cookiesEnabled()){ 
    echo "Problem"; 
} else { 
    echo "Success"; 
} 

"成功" のみ表示されます。

私は「修正」「回避策」として値を入力していますが、これはうまくいくと思いますが(簡単ですが)、この問題はにあります。他の人からの確認を得るためにうまくいけば。

値を必要とするPHPのバージョンは5.6.21です。他のサーバー設定がこの動作を引き起こしている可能性があります。 PHP 5.6.10を使用する別のサーバでは、値パラメータは必要ありません。 "成功"。バージョンを5.6.21にアップグレードしたばかりで、それも失敗しました。

PHPは、明示的に値が必要であることを明示するためにドキュメントを更新する必要がありますか、コーディングのバグが導入されましたか?どちらにも対処する連絡先がないので、この潜在的な不一致を権限に転送してくれてありがとう。

注:私はこのsetcookie("cookiesEnabled", "")のように、結果はので(ない5.6.21で、5.6.10で成功)、それを渡していないと同じですsetcookie場合、少なくともドキュメントは、おそらくあるに「」それを不履行。

+0

http://stackoverflow.com/a/8775627/4007002空のクッキーは自動的に削除され、ドキュメントのbtwにあります。 –

+0

ありがとう - 私はその質問を見つけられませんでしたが、それは非常に似ています。私の2つのバージョンが非常に異なった動作をしているので、彼はPHPバージョンについて言及していませんでした。私は私の質問で同じ行の文書を認めましたが、クッキーの名前が**以前は見られなかった場合、それは作成が行われることを暗示しているようです – veeTrain

答えて

0

私は、バージョンの違いと、偶然に上陸した舞台裏でのコーディングの変更まで、それをチョークすると思います。しかし、PHPのドキュメントに基づいて、どちらの方法が正しいかはまだ分かりません。

PHP 5.6.21バージョンは、導入されたバグを表し、価値のないクッキーを作成すると信じています。新しい動作が永続的な場合は、ドキュメントを確実に更新する必要があります。

私が知る限り、PHP 5.6.10以前では、の新しいクッキーを作成するための値を渡す必要はありませんでした。

PHPの内部動作にもっと親密な人がsetcookie()の意図を話すことができます。

ドキュメントはこれらの2つのバージョン間で変更されていないため、アプローチの1つが間違っています。

この問題が発生した場合は、コメントしていただきありがとうございます。

関連する問題