私は、IPがページを訪れることができる設定された時間枠内で何回カウントし、その時間枠内でダウンロードカウンタに当たるかをカウントするカウンタをPHPで作成しようとしています。IPヒット数をカウントしようとするとセッションが機能しないのはなぜですか?
-
:私も見
- PHP function to increment variable by 1 each time
- How to not increase page/post view count with refresh?
- php increment variable value with 1 when submit
- How do I count unique visitors to my site?
- adding counter to php page to count the unique visitors
:として私がお勧め見てきた手法にはいくつかのQ &を参照した後のセッションでこれをやっていました
私は自分のコードに障害ところがあると考えているので、私はクッキーとセッションで多くの経験を持っていません。私がやっていることよりも良い実装についてのアドバイスがあれば助言してください。
コード:
$jsonFile = 'foobar.json';
$theJSON = file_get_contents($jsonFile);
$jsonArray = json_decode($theJSON, true);
$theIP = "123.123.123"; // $_SERVER['REMOTE_ADDR']
$thisTime = date("H:i");
$addMin = 1; // set value for testing purposes
$addHour = 0; // set value for testing purposes
$downloadHits = 5; // set value for testing purposes
$timeLater = date("H:i", strtotime($thisTime)+(($addMin*60)+($addHour*60*60)));
if (!empty($theIP) && !empty($jsonArray)) {
foreach ($jsonArray as $value) {
if (in_array($theIP, $value, true)) {
echo "yes"; // header('Location: https://www.url/darthvader.com');
exit();
} else {
if ($thisTime <= $timeLater) { // where my issue starts
echo $timeLater; // for testing
session_start();
$counter = $_SESSION['promo_number'];
$counter++;
if ($counter == $downloadHits && file_exists($jsonFile)) {
$currentData = file_get_contents($jsonFile);
$currentArray = json_decode($currentData, true);
$theStuff = array(
'ip' => "123.123.123", // $_SERVER['REMOTE_ADDR']
'date' => date("H:i"),
'time' => date("m.d.y")
);
$currentData[] = $theStuff;
$finishData = json_encode($currentData);
} else {
echo 'bar'; // for testing
session_unset();
session_destroy();
}
}
}
}
} else {
echo '<span style="color:red; font-weight:bold;">empty file</span>';
}
私がやろうとしていますどのようなIPが設定された時間内にポストを訪問し、それがヒットした場合、そのカウントはIPをリダイレクト回を数えています。 IPが偽装されている可能性があることを知っています。私はそのことを心配していません。私はが好きではありません。は現在データベースを使用しています。では、ヒット数をカウントするセッションを適切に設定するにはどうすればいいですか?そして、IPがセットカウントでポストにヒットしたら、IPをリダイレクトしますか?
EDIT:
いくつかの読書と私は私がやろうとしていますかを説明願って編集を行ったコメントと答えからの支援を行った後。さらに調査した結果、私は全体で走っ:
- session_destroy() after certain amount of time in PHP
- How do I expire a PHP session after 30 minutes?
をコードに私を導いた:今
session_start();
$jsonFile = 'foobar.json';
$jsonArray = json_decode(file_get_contents($jsonFile), true);
$theIP = $_SERVER['REMOTE_ADDR'];
$addMin = 2; // set value for testing purposes
$addHour = 0; // set value for testing purposes
$targetedHits = 1; // set value for testing purposes
$timeLater = time() + ($addMin*60) + ($addHour*60*60);
$_SESSION['expire'] = $timeLater;
if (!empty($theIP) && !empty($jsonArray)) {
//look for the $theIP
if (in_array($theIP,array_column($jsonArray,'ip'))) {
echo 'IP found in json';
exit;
}
// look at the time the session was set, add to counter or delete session
if ($_SESSION['count'] = isset($_SESSION['count']) && time() < $_SESSION['expire']) {
echo 'adding to count';
$_SESSION['count'] + 1;
// limit reached. Add IP to blacklist
if ($_SESSION['count'] > $targetedHits) {
echo 'session count reached max';
$jsonArray[]=[
'ip' => $theIP,
'date' => date("H:i"),
'time' => date("m.d.y")
];
// save changes
file_put_contents($jsonFile,json_encode($jsonArray));
session_destroy();
exit;
}
} elseif (time() > $_SESSION['expire']) {
echo 'nuking session and counter';
session_destroy();
} else {
echo 'setting count to 1';
$_SESSION['count'] = 1;
}
}
echo '<pre>';
var_dump($_SESSION);
echo '</pre>';
しかし、悲しいことを$_SESSION['count'] + 1;
もはや増加します。
上記には、 'session_start();という連続した行があります。 $ counter = $ _SESSION ['promo_number']; ' - $ _SESSION ['promo_number'];は定義されています??それは意味をなさないと思われます – RamRaider
これは私の問題がどこにあるかでなければなりません。私はまだセッションについて研究しており、セッションへのいくつかのQ&Aアプローチのテストを終了しました。 –
また、ループのすべての反復で新しいセッションを開始すべきではありません。すべてのページの一番上で十分です〜ですが、if($ counter == $ downloadHits && file_exists($) jsonFile)){'はセッション変数を破棄しません... – RamRaider