Merhaba arkadaşlar;
Öncelikle ne yaptığımı yapmak istediğimi açıklayayım kişi konuya girdiği zaman konu 1 kez okundu olarak veri tabanına kayıt ekletiyorum. Kişi sayfayı tekrar yenilediğinde ise kayıt ekletmiyorum. Gayet iyi fakat google chrome ve Edge tarayıcısında güzel çalışıyor ama Mozilla Firefox tarayıcısında sayfa yenilensede cache kontrolü yapmıyor veriyi defalarca kayıt etmiş oluyor.
Mozilla firefox tarayıcıda ağ yönetimine baktığımda böyle yazıyor. => Cache-Control : no-store, no-cache, must-revalidate
Buraya yazıp sizi rahatsız etmemek için çok araştırdım fakat bir yöntem bulamadım. Bir fikrinizi alabilir miyim?
<?php
$pageRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) &&($_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0' || $_SERVER['HTTP_CACHE_CONTROL'] == 'no-cache');
if($pageRefreshed == 0){
echo 'Sayfa yenilendi.';
}else{
echo 'İlk defa geldiği için işlem yap veri tabanına ekle ';
}
?>
Php Pdo ile Cache Control İşlemi Sorunu & Tarayıcılar Arası Sıkıntı
9
●188
- 15-01-2023, 20:19:10HTTP_CACHE_CONTROL mozilla da kullanılmıyor onun yerine session kullan
bunu kullana bilirsin
<?php session_start(); if(!isset($_SESSION['visited'])){ echo "İlk defa geldiği için işlem yap veri tabanına ekle"; $_SESSION['visited'] = true; }else{ echo "Sayfa yenilendi."; } ?> - 15-01-2023, 20:33:34session her yerde çalışır hocamErtenya adlı üyeden alıntı: mesajı görüntüle
- 28-01-2023, 11:09:27Mozilla Firefox tarayıcısı, sayfa yenilendiğinde "no-store" ve "no-cache" özellikleri ile HTTP Cache-Control başlığını gönderir. Bu nedenle, sadece sayfa ilk defa yüklendiğinde işlem yapmak istediğinizde, $_SERVER['HTTP_CACHE_CONTROL'] değişkenini kontrol etmeli ve "max-age=0" veya "no-cache" değerine eşit olup olmadığını kontrol etmelisiniz.
Ancak, bazı tarayıcılar sayfa yenilendiğinde bu değişkeni göndermeyebilir. Bu nedenle, alternatif bir yöntem de, sayfa yenilendiğinde çerezleri kontrol etmek olabilir. Aşağıda örnek bir PHP kodunu görebilirsiniz:
<?php
// Sayfa yenilendiğinde çerezleri kontrol et
if(isset($_COOKIE['pageRefreshed'])) {
echo 'Sayfa yenilendi.';
} else {
// İlk defa ziyaret edildi
echo 'İlk defa geldiği için işlem yap veri tabanına ekle ';
// Çerezi oluştur
setcookie('pageRefreshed', 1, time() + 3600);
}
?>
Bu kod, sayfa ilk defa yüklendiğinde çerez oluşturur ve sayfa yenilendiğinde çerezi kontrol eder. Bu yöntem, tüm tarayıcılar için çalışacaktır.
Ayrıca, Tarayıcı özelliklerine göre oluşan bu sorunları çözmek için JavaScript kodlarını kullanarak da çözümler bulunabilir. Örneğin, tarayıcının sayfa yenilendiğini algılamak için window.performance.navigation özellikleri kullanılabilir.
MySQL veritabanı ile bu PHP kodu kullanılabilir. Örneğin, "konu" adında bir tablo olsun ve "konu_id", "konu_baslik", "konu_okundu" gibi sütunlar olsun. İlk defa sayfaya girdiğinde, "konu_okundu" sütununun değeri 1 olarak güncellenebilir ve tekrar sayfaya girdiğinde veritabanına yeni bir kayıt eklenmeyecektir.
Aşağıda örnek bir MySQL sorgusu verilmiştir:
if($pageRefreshed == 0){
$sql = "UPDATE konu SET konu_okundu = 1 WHERE konu_id = '$konu_id'";
mysqli_query($link, $sql);
echo 'Sayfa yenilendi.';
}else{
echo 'İlk defa geldiği için işlem yap veri tabanına ekle ';
}
Bu kod bloğunda, sayfa yenilendiğinde veritabanındaki konunun okundu sayısını arttırırken, sayfa ilk defa açıldığında bir işlem yapmaz.
Ancak, dikkat etmeniz gereken bir nokta var ki oda, üstteki kod bloğunda MySQL sorgusu için gerekli olan mysqli bağlantısının açık olmasıdır. Ayrıca, konu_id değişkeninin tanımlanmış olduğundan emin olmanız gerekir. - 28-01-2023, 12:39:10Evet, her ayrı konuda farklı bir çerez oluşturmanız gerekir. Örneğin, "konu1_okundu", "konu2_okundu" gibi farklı isimlerle çerezler oluşturabilirsiniz. Böylece, kullanıcının hangi konuları yenilendiğini ve hangilerinin ilk defa okunduğunu takip edebilirsiniz. Ayrıca, çerezleri süresi dolmuşsa silebilirsiniz.Ertenya adlı üyeden alıntı: mesajı görüntüle
- 28-01-2023, 12:48:21İnsert işlemimi yapıyorsunuz okuduğunda eğer böyle yapıyor iseniz.
Link cookie değeri vb bilgilerle insert işleminin sonuna on duplicate key update derseniz 2. kayıt oluşmaz mevcutu güncellemeye çalışır