Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Autowylogowywanie z pomocą Ajaxa co 15 min
Forum PHP.pl > Forum > PHP
adamantd
Witam -potrzebuję zrobić autowylogowywanie userów po 15 minutach nieaktywności, ponieważ jeżeli sami się wylogują z niczym nie ma problemu, niszczenie sesji, zapis do bazy daty i godziny ost. wizyty oraz ustawienie statusu online na 0. Jeżeli jednak się nie wylogują tylko zamkną przeglądarkę to cały czas widnieją w wuszukiwarce użytkowników i w ich profilach jako online itd itd.. Żeby skrypt działał i sprawdzał czy byli aktywni chciałbym nadpisywać time() w rekordzie danego usera w bazie danych. Skrypt będzie co 15 minut sprawdzał czy w bazie danych są użytkownicy którzy mają czas większy niż 15 minut i jeśli tak to zostaną wylogowani, sesja zniszczona itd.

Moje pierwsze pytanie to czy jest to odpowiednie rozwiązanie?
Drugie pytanie brzmi czy dobrym rozwiązaniem będzie za pomocą javy-script odpalać co 15 minut ten skrypt php przez ajaxa, żeby nie trzeba było przypiswać odpalenia tego skryptu do jakiejś akcji innych userów którzy akurat coś robią....

Nie wiem czy odpowiednio zadałem te pytania wink.gif
cudny
No ale dla czego nie dasz pola w bazie last_activity i za każdym razem jak klient coś kliknie to da update'a do bazy.
Wtedy pobierasz użytkowników gdzie last_activity jest wieksza niż teraz - 15 minut

Nie musisz ich sztucznie wylogowywać, tym bardziej, że jak zamknie przeglądarkę to zostaje ci na zawsze aktywny tongue.gif
adamantd
Chodzi Ci mniej więcej o to, żeby w bazie trochę pozmieniąc? tzn tam gdzie w pole status_online zapisuję odpowiednio 0 lub 1 zapisywać po prostu time() i przy każdej aktywności updatować a w wyszukiwarce tych którzy byli aktywni w ciągu ostatnich 15 minut wyświetlić jako online? -to całkiem niezła myśl smile.gif uprości mi trochę jutrzejszy poranek

ale to chyba będę musiał pozmieniać kilka innych rzeczy również, nie będę zapisywał time tylko pełną datę z godziną ale nie będzie też osobnego pola data ostatniej wyzyty updatowanej podczas wylogowywania się tylko tamta data będzie ostatnią wizytą smile.gif
cudny
Exactly.

Ale ja bym tam dał timestamp sql'oski, będzie mniej zasobów zabierał, jak dasz tam intiger to będziesz miał int(11) - bez sensu tongue.gif
Użyj do tego zasobów bazy, skoro i tak z niej korzystasz.
Poza tym, tak jak napisałeś, masz faktyczny obraz, o której ktoś się wylogował (utracił aktywność).
Ciesze się, że mogłem pomóc smile.gif
redeemer
Cytat(cudny @ 12.10.2012, 10:59:31 ) *
... Ale ja bym tam dał timestamp sql'oski, będzie mniej zasobów zabierał....

INT i TIMESTAMP zajmują tyle samo czyli 4 bajty ( http://dev.mysql.com/doc/refman/5.0/en/sto...quirements.html ). Typ TIMESTAMP ma jednak inne zalety nad INT, np:
  • Możesz użyć automatycznego przypisywania za pomocą np DEFAULT CURRENT_TIMESTAMP i ON UPDATE CURRENT_TIMESTAMP
  • Możesz korzystać z funkcji MySQL do porównywania czasów
cudny
Faktycznie, int waży tyle samo, nigdy mnie to nie zastanawiało tak na prawdę, timestamp jest do tego stworzony i tyle smile.gif
adamantd
Witam ponownie -czyli jak dobrze zrozumiałem zamiast INT mogę użyć TIMESTAMP ale z tego co widzę na poniższym przykłądzie w zamieszczonym linku w TIMESTAMP można zapisać całą datę i godzinę razem z separatorami czego nie zrobię w INT (wolę zapisywać date("Y-m-d H:m:s")), ponieważ jest to dla mnie czytelniejsze na poziomie odczytu bezpośrednio w phpmyadmin (chodzi konkretnie o datę ostatniej wizyty usera)

http://blog.kowalczyk.cc/2011/07/01/mysql-...typu-timestamp/

więc z tego co tu przeczytałem TIMESTAMP może być dość przydatny powiedzcie mi zatem czy używając parametrów ON UPDATE CURRENT_TIMESTAMP każdorazowo przy jakiejkolwiek akcji usera która zostanie wykonana na jego rekordzie czas będzie nadpisywany w tym polu? czy działa to również na zapytanie typu SELECT czy tylko edycja rekordu?
Nie chciałbym, żeby inny użytkownik wchodząc w profil usera którego przegląda nadpisał mu tym samym jego pole TIMESTAMP

Ok chyba już wszystko wiem timestamp jest brzydki i z poziomu myadmin i tak nie wygląda bardzo czytelnie bo nie ma separatorów -dlatego wykorzystam do tego DATETIME i będę przy każdej akcji nadpisywał po przez skrypt z poziomu php

problem rozwiązany dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.