2017-05-24 10 views
-1

恐らく疑わしい質問ですが、PHPの学習を始めたばかりですが、今はセッション変数でセッションを閉じるまでにページを訪問しなければならないという練習が必要ですブラウザ。一方、クッキーはあなたがウェブサイトをどれだけ頻繁に訪問したかをカウントする必要があります。 ウェブブラウザを閉じた場合でも、クッキーのカウントを続ける必要があります。 これは私の問題です。 ウェブブラウザを閉じてもう一度起動すると、クッキーは何度も何度もカウントアップされます。これを解決するには?セッション変数とクッキーを使用してカウントする

PHPファイル

<?php 
    session_start(); 

    if (!isset($_SESSION['count'])) { 
    $_SESSION['count'] = 1; 
    } else { 
    $_SESSION['count']++; 
    } 

    echo "You have visited this page " . $_SESSION['count'] . " times before you closed your browser"; 

    $count = $_SESSION['count']; 

    setcookie("count", "$count", time() + 3600); 

    if (!isset($_COOKIE['count'])) { 
     $_COOKIE['count'] = ($_COOKIE['count'] + $_SESSION['count']); 
    } else { 
     $_COOKIE['count']++; 
    } 
    echo "<br> In total you have visited this page " . $_COOKIE['count'] . " times"; 
?> 
+0

は閉じ、またはこれまでにウェブサイト上のページ要求の合計数の前にウェブサイトを訪問?クッキーカウンタは、セッションカウンタの集計、またはそのユーザーに対して発生したセッションカウンタの総数ですか? – Flosculus

答えて

0

は、私はあなたがパスでクッキーを設定しなければならないと思います

setcookie("count", "$count", time() + 3600, "/"); 
+1

[マニュアル](http:// php。net/setcookie):*デフォルト値は、クッキーが設定されている現在のディレクトリです。 –

0

ほとんどの主要なブラウザはクッキーインスペクタを含める開発ツールをバンドル。 FirefoxではStorage Inspectorと呼ばれています。これは、プログラムメニューで見つけることができますが、default short-cutShiftキー + F9次のとおりです。

Storage Inspector

あなたのクッキーが表示されるはずです。また、ネットワークモニタは(はCtrl + Shiftキー + Q)あなたは、サーバー側からクッキーを設定しているため、クッキーを受信して​​(バック送られているかどうかを診断することができ、使用するトランスポートメカニズムは、HTTPヘッダです)。

Network Monitor

また何度でもPHPマニュアルを確認する必要があります。 IDEからコードからリンクが生成されない場合、使用できる小さなトリックがあります:http://php.net/に関数名を追加します(例:http://php.net/setcookie)。

なく、少なくとも最後に、あなたは、与えられた配列のキーが存在しない、まだあなたはとにかく変数を使用するときに実行する条件を持っている:

if (!isset($_COOKIE['count'])) { 
     $_COOKIE['count'] = ($_COOKIE['count'] + $_SESSION['count']); 
          ^^^^^^^^^^^^^^^^^ 

PHPはPHPのセットからだと、警告を表示しなかった場合-upはそれを隠すように設定されています。エラーメッセージの助けを借りずにコーディングするのは難しいため、できるだけ早く修正する必要があります。クイックスタートとして、コンピュータのシステム全体のphp.iniファイル(details here)にerror_reportingdisplay_errorsという指示文を設定することができます。エラーサムルール:開発中に表示し、プロダクションにログインします。

問題を解決するには、これらのツールで十分です。

1

セッション値でCookie値を上書きしています。代わりに

クッキーがすでに設定されており、もしそうなら、それに追加されたかどうかを確認:

session_start(); 

    if (!isset($_SESSION['count'])) { 
    $_SESSION['count'] = 1; 
    } else { 
    $_SESSION['count']++; 
    } 

    $count = $_SESSION['count']; 

    if (!isset($_COOKIE['count'])) { 
     setcookie("count", $count, time() + 3600); 
     $_COOKIE['count'] = $count; //setcookie does not update the superglobal $_COOKIE 

    } else { 
     setcookie("count", $count + $_COOKIE['count'], time() + 3600); 
     $_COOKIE['count'] += $count; //see above 
    } 
    //also headers (eg for setting cookies) can only be sent BEFORE the response body, so no echos 
    echo "You have visited this page " . $_SESSION['count'] . " times before you closed your browser"; 
    echo "<br> In total you have visited this page " . $_COOKIE['count'] . " times"; 
関連する問題