1

Web サイトから訪問者の IP とブラウザーに関する情報を取得し、それをデータベースのテーブルに格納する PHP スクリプトを作成しました。このスクリプトはヘッダーに含まれており、各ページが読み込まれるたびに実行されます。Google アナリティクスのようなものです。調査.php

このコードを Web サイトの新しい訪問者ごとにのみ実行して、新しい訪問者ごとにのみログに記録するようにします。

これは Cookie を設定することで行われると思います。そのため、Cookie を設定するこの他のコードを作成し、Cookieがない場合にのみsurvey.phpを含めます。私は使用しましたissetの関数は、存在しない場合に if ステートメントを実行しますが、Cookie を設定しておらず、ロードのたびにスクリプトを実行しています。

マニュアルに記載されている内容に基づいて、どこが間違っているのかわかりません。

<?php 
if(!isset($_COOKIE['Name'])){
    setcookie("Name");
    include ('survey.php');
}
?>

編集:値を追加し、複数のユーザーでテストしましたが、スクリプトは引き続き各ロードを実行します。理由はわかりません。

4

4 に答える 4

2

Cookie に値を指定します。

$value = 'something from somewhere';

if(!isset($_COOKIE['Name'])){
  setcookie("Name", $value);
  include ('survey.php');
}

新しいユーザーを識別することを考えると、「0」または「1」を使用するだけで十分です。

将来の時点で Cookie の有効期限が切れるようにする場合は、次のようにします。

setcookie("Name", $value, time()+604800);  /* expires in a week */

編集:

シンプルなページで次のコードを使用してこれを試しました。

<?php 
  if(!isset($_COOKIE['Test'])){

    setcookie("Test", '1');
    echo "Cookie set";
    //include ('survey.php');
  }
?>

「Cookie セット」を一度取得すると、その後の更新では表示されません。コンソールにも Cookie が表示されます。

Test | 1 | www.domain.com | / | Session | 5

唯一の潜在的な問題 (別のユーザーを使用しているため) は、この Cookie が現在のセッション用に設定されていることです。そのため、有効期限をかなり先に設定すると、永続性に優れ、ユーザーがアンケートをすぐに見ることができなくなります。

<?php 
  if(!isset($_COOKIE['Test'])){

    //Expires on 31 december 2015
    setcookie("Name","1",mktime (0, 0, 0, 12, 31, 2015));
    include ('survey.php');
  }
?>
于 2013-03-29T12:47:43.437 に答える
1

解決済み

コードを最初のコードとして含めていましたが、最初の行には含めていませんでした。

Cookie を設定するコードは、1 行目ですべての前に開始する必要があります。

他の人が利益を得ることができるようにこれを投稿します。

于 2013-03-30T11:09:16.193 に答える
1

1) $value = 'Test'; のように Cookie の値を設定してみてください。setcookie("TestCookie", $value);

2) ブラウザで Cookie が有効になっているかどうかを確認します

于 2013-03-29T12:49:34.970 に答える
1

Cookie を設定するには、つまり PHP からユーザーに送信される Cookie を取得するには、値を指定する必要があります。ブラウザー (少なくとも最新のブラウザー) は、空の Cookie ヘッダーを、その名前の Cookie を消去する命令として受け取ります。

したがって、明らかに、ブラウザーはそれを null に設定する代わりに破棄したため、それ以降の要求では送信されません。

ランダムな短い値を指定すると、すべての問題が解消されます。

setcookie("Name",rand(1,10));

または類似。

于 2013-03-29T12:51:53.317 に答える