Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Czas przebywania na stronie.
Kużdo
post 8.04.2012, 12:59:11
Post #1





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


Witam,

W jaki najłatwiejszy sposób zrealizować zapis czasu przebywania na stronie przez usera?

Myślałem o ciasteczkach i skrypcie JS, który przy opuszczaniu strony zapisywałby czas przebywania do ciasteczka. Przy wejściu na kolejną podstronę PHP odczytywałoby ciasteczko z dokładnym czasem. Ale nie wiem czy tak można zrobić, a poza tym nie znam się akurat na JS.

Byłby ktoś chętny pomóc/nakierować?

Pozdrawiam
Go to the top of the page
+Quote Post
Ruch Radzionków
post 8.04.2012, 15:10:27
Post #2





Grupa: Zarejestrowani
Postów: 311
Pomógł: 25
Dołączył: 29.08.2011

Ostrzeżenie: (0%)
-----


ja posiadam zliczanie ile osob jest na stronie w pliku textowym on zapisuje ip oraz obok tego jest od kiedy jest dano ip to mozesz sobie przerobic na sprawdzanie od danego uzytkownika ile jest na stronie
  1. $minut = 1;
  2. $teraz = time();
  3. $aktywnosc = $teraz - (60 * $minut);
  4. $teraz = time()+60*$minut;
  5. $bazaip = file("ip.txt");
  6. $ile = count($bazaip);
  7. $ip = $_SERVER["REMOTE_ADDR"];
  8. for ($i=0;$i<$ile;$i++)
  9. {
  10. $pol = explode("`",$bazaip[$i]);
  11. if ($pol[2]<time())
  12. { $bazaip[$i]=""; }
  13. if ($pol[1]==$ip)
  14. { $bazaip[$i]="`$ip`$teraz`<br>\n"; $jest=1; }
  15. }
  16. if ($jest<>1) $bazaip[]="`$ip`$teraz`\n";
  17. $f = fopen("ip.txt","w");flock($f,2);
  18. for ($i=0;$i<$ile+1;$i++)
  19. {
  20. if ($bazaip[$i]<>"") { fwrite($f, $bazaip[$i]); $ileip++; }
  21. }
  22. flock($f,3); fclose($f);


--------------------
Pomogłem daj pomógł
Go to the top of the page
+Quote Post
Barcelona
post 8.04.2012, 19:42:07
Post #3





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


Tak, to się sprawdza kiedy chcesz widzieć ilu jest userów, ale problem w tym że kolega chce widzieć jak długo dany user jest na stronie.
Ja osobiście jestem przeciwnikiem korzystania z obsługi plików. Korzystało się z nich w czasach kiedy hostingi z bazą były drogie, teraz są inne czasy i takie rzeczy są w standardzie. Problemem są również dzisiejsze przeglądarki, które zapamiętują bieżącą sesję, nawet jeżeli zamknęło się zakładkę ze stroną.
Nie jest problemem policzyć od kiedy jest bo można to zrobić automatem w chwili logowania. Jednak nie każdy user się wylogowuje, i tutaj jest kot pogrzebany ;p
Sam jestem ciekaw jak można rozwiązać Twój problem smile.gif Pozdrawiam
Go to the top of the page
+Quote Post
Ruch Radzionków
post 8.04.2012, 19:46:43
Post #4





Grupa: Zarejestrowani
Postów: 311
Pomógł: 25
Dołączył: 29.08.2011

Ostrzeżenie: (0%)
-----


a jak bys to sprowadzil do sesji ze po zalogowaniu zabpisuje np.
$_SESSION[czas] = time();

i potem odczytujesz to moim zdaniem bylo by lepsze i to by sie sprawdzilo


--------------------
Pomogłem daj pomógł
Go to the top of the page
+Quote Post
Barcelona
post 8.04.2012, 19:51:00
Post #5





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


Tak, ale weź pod uwagę, że sesja funkcjonuje nawet po wyłączeniu karty ze stroną. bynajmniej w Operze, Chromie, FF itd.
Go to the top of the page
+Quote Post
Ruch Radzionków
post 8.04.2012, 20:00:14
Post #6





Grupa: Zarejestrowani
Postów: 311
Pomógł: 25
Dołączył: 29.08.2011

Ostrzeżenie: (0%)
-----


w inny sposob raczej nie zobaczysz moze przy uzyciu js


--------------------
Pomogłem daj pomógł
Go to the top of the page
+Quote Post
Barcelona
post 8.04.2012, 20:29:40
Post #7





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


Na upartego, jeżeli jest to takie ważne, można wysyłać confirm do user czy nadal korzysta ze strony. Ale to już była by łopata smile.gif
Go to the top of the page
+Quote Post
Kużdo
post 8.04.2012, 23:28:38
Post #8





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


Doszedłem do rozwiązania i proszę bardzo dla potomnych:

Korzystać z JS, a mianowicie ja skorzystałem z jQuery (bo i tak z niego korzystam) i funkcji unload() i ajax(). Przy wejściu na stronę do bazy zapisywany jest czas rozpoczęcia sesji, a po zamknięciu zakładki/strony/etc skrypt JS przesyła dane do drugiego skryptu, który dopisuje czas do bazy jako koniec sesji.
Go to the top of the page
+Quote Post
Barcelona
post 8.04.2012, 23:54:43
Post #9





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


A czy mógłbyś podzielić się kodem; Tak się składa, że jestem tym potomnym smile.gif ;
Go to the top of the page
+Quote Post
Kużdo
post 9.04.2012, 08:26:19
Post #10





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


  1. <script type="text/javascript">
  2. $(window).unload(function(){
  3. $.ajax({
  4. type: "POST",
  5. url: "ajax.php",
  6. data: "id=5"
  7. });
  8. });

W data podajesz zmienne dzięki którym możesz identyfikować osobników. Przykładowo możesz wstawiać tam jakiś hash wygenerowany dla każdego wywołania osobno i unikalny, ew. łączony z innymi zmiennymi. Zmienne podajesz w formacie nazwa1=wartosc1&nazwa2=wartosc2. Jeżeli to ma być tylko zliczanie czasu pobytu, to tyle wystarczy.

ajax.php to plik, który ma być wywoływany tylko i wyłącznie przez JS. Przydałoby się go też odpowiedno zabezpieczyć. Ale najprostsza wersja, bez zabezpieczeń, etc, etc, etc, to np.:
  1. <?php
  2. $dbhost = 'localhost';
  3. $dbuser = 'root';
  4. $dbpass = 'password';
  5. $dbname = 'database';
  6.  
  7. @mysql_connect($dbhost, $dbuser, $dbpass);
  8. @mysql_query("SET NAMES 'utf8'");
  9. @mysql_select_db($dbname);
  10.  
  11. $result = mysql_query("UPDATE `history` SET `end` = '".time()."' WHERE `id` = '".$_POST['id']."'");
  12. ?>


Inna wersja to przykładowo zapisywanie czasu startu sesji do zmiennych sesyjnych, a w pliku AJAX odejmowanie od obecnego czasu, czasu ze zmiennej sesyjnej i dopiero zapisanie tego do bazy, wtedy ma się tylko jedno zapytanie na wywołanie strony:
  1. $dlugosc_pobytu = time() - $_SESSION['start_sesji'];
  2. $result = mysql_query("INSERT INTO `history` (`login`, `ip`, `start`, `dlugosc`) VALUES ('{$_SESSION['login']}', '{$_SERVER['REMOTE_ADDR']}', '{$_SESSION['start_sesji']}', '{$dlugosc_pobytu}')");


Pozdrawiam smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 2.05.2025 - 06:23