2017-11-28 19 views
-1

私は現在、アカウント作成システムを作成する必要のある小さなWebサイトで作業しています。ユーザーが既に接続されているかどうかを知るために、私はクッキーを使用したいと思っています。これは最も簡単な方法です。しかし、php.netの公式ドキュメントやその他のフォーラムを確認した後、私はまだ私のクッキーを作成することができません。ここに私のコードです:setcookie()関数が動作しません

function connexionOK() { 
    $cookieName = "CookieCo"; 
    $cookieValue = "true"; 
    $isSent = setcookie($cookieName, $cookieValue, time() + 3600, "/"); 

    if($isSent) { 
    echo '<script type="text/javascript">'; 
    echo "alert('Cookie envoyé');"; 
    echo "</script>"; 
    } 
    else { 
    echo '<script type="text/javascript">'; 
    echo "alert('Cookie failed');"; 
    echo "</script>"; 
    }} 

私は 'Cookie failed'というページを実際に警告しています。

私を助けようとしてきた皆様、ありがとうございます!

はこれを試してみて、あなたが例外を取得するかどうかを確認:

function connexionOK() { 
    $cookieName = "CookieCo"; 
    $cookieValue = "true"; 
    if(headers_sent()){ 
     throw new Exception('Cannot set cookie, headers already sent'); 
    }else{ 
     $isSent = setcookie($cookieName, $cookieValue, time() + 3600, "/"); 
     if($isSent){ 
      echo '<script type="text/javascript">'; 
      echo "alert('Cookie set');"; 
      echo "</script>"; 
     }else{ 
      echo '<script type="text/javascript">'; 
      echo "alert('Cookie not set');"; 
      echo "</script>"; 
     } 
    } 
} 

connexionOK(); 

もしそうなら、:)

+2

マニュアルから: 'この関数を呼び出す前に出力が存在する場合、setcookie()は失敗し、FALSEを返します。 setcookie()が正常に実行されると、TRUEを返します。これは、ユーザーがクッキーを受け入れたかどうかを示していません。setCookie()を呼び出す前に出力されているように見えます。 –

+1

私のために働きました。出力する前にsetcookieを呼び出す必要があります。 –

+0

Johnのコメントに追加するか、同じページを設定してチェックすることはできません。ページをリロードするか(再設定せずに)、別のページをチェックする必要があります。 – Andreas

答えて

0

をお試しくださいあなたはリファクタリングをし、ヘッダーが送られる前にあなたがsetcookieを確実にする必要があります。

編集:上記のコードは、より多くの問題を明確に説明するために含まれていた - それは下手に書かれたとヘッダがすでに例外をスローし、おそらく実行を終了します送っている間に設定しますsetcookieをコールするなど多くの冗長性を備えています。そうでない場合は、小切手を追加してそれに応じて処理する必要があります。

-1

は、ヘッダがすでに送信された後あなたはこの関数を呼び出すことが可能

if(isset($_COOKIE['CookieCo'])){ 
    echo '<script type="text/javascript">'; 
    echo "alert('Cookie envoyé');"; 
    echo "</script>"; 
    } 
    else { 
    echo '<script type="text/javascript">'; 
    echo "alert('Cookie failed');"; 
    echo "</script>"; 
    } 
+0

これは、ブラウザが最初のリクエストのヘッダを受信した後、2番目のリクエストに対してのみ動作し、2番目のリクエストに対してクッキーを返します。質問者が尋ねたものではありません。 – IncredibleHat

+0

するかしないか、「試行」はありません。 ***良い答え***は、何が行われたのか、それがなぜOPのためだけでなく、将来の訪問者のためにそうした方法で行われたのかについての説明を常に持っています。 –

関連する問題