Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z session_save_path po wyłączeniu przeglądarki nie znikają użytkownicy online
poli25
post
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


Jak zrobić żeby po wyłączeniu przeglądarki znikały osoby online. Mam kod, w którym gość robi dokładnie to co ja i jemu się udaje a mi nie działa ;(
oto feralny kod:

session_start();
$session_path=session_save_path();
$visitors=0;
$handle=opendir($session_path);


while(($file=readdir($handle))!=FALSE)
{
if($file!="." && $file!="..")
{
if(ereg("^sess",$file))
$visitors++;

}
}
echo "online:$visitors";

Ten post edytował poli25 9.11.2010, 09:12:46
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
norbis
post
Post #2





Grupa: Zarejestrowani
Postów: 42
Pomógł: 8
Dołączył: 30.04.2008

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


O proszę, nigdy bym nie wpadł, żeby liczyć to w ten sposób (IMG:style_emoticons/default/winksmiley.jpg)

długość życia tych plików określany jest w php.ini przez opcję session.gc_maxlifetime

Jeśli nie masz możliwości tego zmienić, to zapisuj coś do sesji przy każdym przeładowaniu strony. Przy obliczaniu ilości osób online, odczytuj czas modyfikacji pliku i jeśli starszy od np. 5 minut to go nie licz. Jednak przy większej ilości użytkowników polecałbym mimo wszystko bazę danych.
Go to the top of the page
+Quote Post
poli25
post
Post #3





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


Cytat(norbis @ 9.11.2010, 10:32:19 ) *
Jednak przy większej ilości użytkowników polecałbym mimo wszystko bazę danych.

mam właśnie bazę danych jak to zrobić z użyciem bazy danych ?
Go to the top of the page
+Quote Post
norbis
post
Post #4





Grupa: Zarejestrowani
Postów: 42
Pomógł: 8
Dołączył: 30.04.2008

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


Hmm, może coś w ten deseń, choć pewnie da się prościej - jakiś niewyspany jestem (IMG:style_emoticons/default/winksmiley.jpg) :
Tworzysz tabelkę users_online z 2 polami: user_id (integer, auto_increment) oraz time (integer).

  1. //$sql - obiekt PDO
  2. $sql->query("DELETE FROM users_online WHERE time<'".($_SERVER['REQUEST_TIME']-300)."'");
  3. if(is_set($_SESSION['user_id']))
  4. $sql->query("UPDATE users_online SET time='{$_SERVER['REQUEST_TIME']}' WHERE user_id='{$_SESSION['user_id']}'");
  5. else
  6. $_SESSION['user_id'] = $sql->query("INSERT INTO users_online (time) VALUES ('{$_SERVER['REQUEST_TIME']}')");
  7. $online = $sql->query("SELECT count() AS online FROM users_online");
  8. ...


To tak na szybko pisane, ale mam nadzieję, że łapiesz idee. Należałoby oczywiście opakować w jakąś ładną klasę, dodać buforowanie w sesji, bo bez sensu kasowanie i pobieranie co odświeżenie.

edit:

Już widzę błąd, powyższy kod nie policzy osoby, której sesja nie zdążyła wygasnąć, a już została skasowana z bazy, więc musiałbyś i to sprawdzać, może jednak pierwszy pomysł był lepszy (IMG:style_emoticons/default/tongue.gif)

Ten post edytował norbis 9.11.2010, 10:15:05
Go to the top of the page
+Quote Post
poli25
post
Post #5





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


wiesz próbowałem zmienic czas w php.ini tam było 1440 zmieniłem na 120 ale nadal po tym czasie nie znikają sesje po tym czasie ;( w ogóle to katalog musialem mu wskazać bo nie widział zmieniłem :


$session_path=session_save_path('sesje/');
session_start();


$session_path=session_save_path();
$visitors=0;
$handle=opendir($session_path);

$pattern='/^sess/';
while(($file=readdir($handle))!=FALSE)
{
if($file!="." && $file!="..")
{
if(preg_match($pattern,$file))
$visitors++;

}
}
echo $visitors;

ale nadal nie kasuje mam w katalogu sesje ale nie znikaja
Go to the top of the page
+Quote Post
norbis
post
Post #6





Grupa: Zarejestrowani
Postów: 42
Pomógł: 8
Dołączył: 30.04.2008

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


Jeśli chcesz używać sesji do czegoś innego niż liczenie osób online, to 2 minuty to za mało, spróbuj raczej tak jak pisałem:
  1. $session_path=session_save_path('sesje/');
  2. $_SESSION['time'] = $_SERVER['REQUEST_TIME']; //modyfikujemy plik sesji
  3.  
  4. $session_path=session_save_path();
  5. $visitors=0;
  6. $handle=opendir($session_path);
  7.  
  8. $pattern='/^sess/';
  9. while(($file=readdir($handle))!=FALSE)
  10. {
  11. if($file!="." && $file!="..")
  12. {
  13. if(preg_match($pattern,$file))
  14. if(filemtime($session_path.$file) > $_SERVER['REQUEST_TIME'] - 120) //sprawdzamy, czy plik zmodyfikowany w ciągu 2 ostatnich minut
  15. $visitors++;
  16.  
  17. }
  18. }
  19. echo $visitors;


I przy okazji, uprość sobie życie i korzystaj z możliwości PHP5 - poczytaj o funkcji scandir (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował norbis 9.11.2010, 11:13:06
Go to the top of the page
+Quote Post
poli25
post
Post #7





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


tak to je to tego mi brakowało (IMG:style_emoticons/default/winksmiley.jpg) serdeczne dzięki (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 10:50