Licznik sciągnieć - jQuery(AJAX) / Problem z Cookie


(Howks0) #1

Witam

Chciałem zrobić prosty licznik ściągnięć bez MySQL/PHP tylko jQuery(AJAX)/PHP.

Wszystko ładnie działa ale w momencie jak chciałem założyć prostą blokadę cookie (wysyłane z pliku php) na kliknięcie pojawia się problem - różne przeglądarki widzą to ciastko a inne nie np. FF 3.0.4 nie widzi cookie ale nalicza kliknięcia, Opera wszystko działa jak należy, IE6 również, Safari/Chrome w ogóle nie nalicza kliknięć i nie widzią cookie.

Link

Pobierz[/code]




Banalna funkcja js

[code] function counter(dir) { $.post(dir, function(data){}); }
Skrypt PHP "count.php"

<?


   $fi = 'count.txt';

   $get = file_get_contents($fi);

   $get = (integer) $get;


  if($_COOKIE['ld']!='lock')

  {

         if(is_numeric($get))

         {

           $get++;

           file_put_contents($fi, $get, LOCK_EX);

         }

         else

         {

           $get = 1;

           file_put_contents($fi, $get, LOCK_EX);

         }


         setcookie('ld', 'lock', false, '/', false, 0);

  }


?>

Wersja jQuery 1.2.6

Wersja PHP 5.2.6

Testowane na localhost


(Howks0) #2

Dzisiaj zrobiłem parę testów dlaczego ten sposób naliczania kiepsko działa i wynik jest następujący. Różne sposoby wysyłania ciastka przez setcookie z count.php nie dawały żadnego rezultatu (w różnych przeglądarkach ciastko było lub nie). Zmiana na blokadę sesyjna zadziałała w każdej przeglądarce oprócz Chrome/Safari gdzie również tylko w tych przeglądarkach obiekt AJAX w ogolę nie był wysyłany. Okazało się że w tych przeglądarkach każdy link do pliku np. Pobierz plus zdarzenie onClick obsługiwane w linku np. onClick="jakasFunkcjaAjax()" czy wykrywane przez jQuery łącznie z wysyłaniem AJAX'owego obiektu - nie działa. Nie wiem czy wina leży po stronie tych przeglądarek czy jQuery.

W każdym razie zrezygnowałem z AJAX'owego naliczania kliknięć w link i zrobiłem to tradycyjnie w postaci Pobierz gdzie download.php nalicza kliknięcie i wysyła header() do pliku. Działa wszędzie łącznie z blokadą na kliknięcia.

Można zamknąć :slight_smile: