v2.5.2
Giriş yap

COOKIE ile tekil hit

pcmemo
699 defa görüntülendi

Arkadaşlar ürünlerin gösteirldiği sayfada o ürünü kaç kez görüntülendiğini gösteriyorum.
Fakat her refresh yapıldığında sayaç artmaması için sayfa görüntülendiği anda $_GET['UrunID'] cookiye atayıp 1 gün süre ile refresh yaptığında saymasın istiyorum.

 setcookie('GoruntulenenUrunID['.$_GET['UrunID'].']', strtotime('+1 day'));

şeklinde görüntülenen sayfayı cookiye yazdırıyorum.

Fakat tekrarlandığında bu cookie içinde bu UrunID var mı kontrolünü nasıl yaparım bulamadım.

Cevap yaz
Cevaplar (9)
shelby
1490 gün önce

@pcmemo doğru düşünmüşsün, kimliği doğrulanmamış kullanıcı da cookie kullanmalısın. Tek bir cookie oluşturman yetecektir. Veritabanı kısmında userid yerine cookie yazdıracaksın tabii böyle olursa user id kısmı null olacak userid yazdırdığında ise cookie boş olabilir veya ikisini de yazdırabilirsin, işin içine kullanıcı ip'sini de sokabilir misin bilemiyorum. Şu anda sistemi tam kafamda oturtamadım. Kimliği doğrulanmamış
cookie'sinden gelen bilgi ile veritabanından sorgu yaparsan, sonuca ulaşırsın gibime geliyor.

mutluol
1491 gün önce

session kontrolü yaptıracaksın eğer session yok ise misafir kullanıcılar için çerez atayacaksın tamamemen if ve else ile mantığa uygun koşullar yazmana dayalı yani

$uye(bu değişken sesionu temsil ediyor olsun) ve $misafir adında iki değişkenin var diyelim

if(isset($uye)){yukarıadaki çerez kodları}else{$misaifr = setcookie... if(yine çerezler)} gibi... kısacası var mı, yok mu, varsa ne olacak, yoksa ne olacak mantığı üzerinden gitmelisin.

pcmemo
1491 gün önce

@shelby veritabanı tamam ama üye olmayanların UserID sini veritanabına yazdıramadığım için login olmayanlarda hit tekrar tekrar artabilir. O yüzden cookie olabilir diye düşündüm. Login ypmadan her kullanıcının unique olan ne tip bilgisini yazabilirim ki veritabanı seçeneğini devreye alabileyim.

mutluol
1491 gün önce

sen bunu sorunca fark ettim çerezi yanlış tanımlamışsın zaten, değer yok.
$_GET['UrunID'] = 22;
if(@$_COOKIE['GoruntulenenUrunID'.$_GET['UrunID'].''] ===true){}else{setcookie('GoruntulenenUrunID'.$_GET['UrunID'].'', $_GET['UrunID'], strtotime('+1 day'));}
echo $_COOKIE['GoruntulenenUrunID'.$_GET['UrunID'].''];

shelby
1491 gün önce

Sorununa veritabanınıda eklemelisin yoksa çözemezsin, tarayıcılar belli sayıda cookie tutarlar.

pcmemo
1491 gün önce

GoruntulenenUrunID cerez adı UrunID ise sayfada görüntülenen ürünün id'si. Senin yazdığın kodun baş tarafında bu isimdeki cookinin içinde hangi ürünün olduğunu anlaması için UrunID de olması gerekmez mi?

if(isset($_COOKIE['GoruntulenenUrunID'])) yani bu bölüm bu isimde bir çerez varmı diye bakıyor, ama bu çerezin için UrunID var mı diye anlaması gerek.??

mutluol
1491 gün önce

if(isset($_COOKIE['GoruntulenenUrunID'])){}else{setcookie('GoruntulenenUrunID['.$_GET['UrunID'].']', strtotime('+1 day'));} böyle daha kısa oldu

pcmemo
1491 gün önce

Teşekkür ederim.

(çerez adı === true)

kısmını da tam yazabilir misin?

mutluol
1491 gün önce

if(çerez adı === true){ }else{ setcookie('GoruntulenenUrunID['.$_GET['UrunID'].']', strtotime('+1 day')); }

çerez varsa bir işlem gerçekleştirmiyor çerez yok ise çerez tanımlıyor