Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP]Rejestracja zamknięcia okna/zakładki
Forum PHP.pl > Forum > Przedszkole
reseet
Cześć wszystkim,

jest to mój pierwszy post na tym forum dlatego prosze o wyrozumiałość. Chce do swojego projektu wdrożyć funkcjonalność która będzie reagowała w momencie gdy użytkownik zamknie zakładke lub okno przeglądarki. Funkcjonalność ma zapisać takie zdarzenie do bazy danych jako wylogowanie za pomocą AJAXa. Posiadam skrypt który wykonuje tę operacje z tym że ma jeden minus. Gdy użytkownik ma otwarty system w dwóch zakładkach i zamknie jedna z nich to system traktuje to jako wylogowanie. Prawidłowo powinien zadziałać w momencie gdy nie ma już więcej otwartych zakładek z tym systemem.

Poniżej zamieszczam to co udało m isie zrobić:
  1. var validNavigation = false;
  2.  
  3. $(document).bind('keypress', function(e) {
  4. if (e.keyCode === 116){
  5. validNavigation = true;
  6. }
  7. });
  8. $("a").bind("click", function() {
  9. validNavigation = true;
  10. });
  11. $("form").bind("submit", function() {
  12. validNavigation = true;
  13. });
  14. $("input[type=submit]").bind("click", function() {
  15. validNavigation = true;
  16. });
  17.  
  18. function saveEvent() {
  19.  
  20. if (!validNavigation) {
  21. //AJAX
  22. }
  23.  
  24. };
  25.  
  26. window.parent.onbeforeunload = saveEvent;


JS nie jest moją mocna stroną dlatego kod wygląda jak wygląda.
rad11
Przegladarka(system) dobrze traktuje to tylko Ty zle to masz zaimplementowane. Przed zamykaniem zakladki oprocz zapisu tego do bazy powiniennes sprawdzic czy uzytkownik jest zalogowany/wylogowany i wtedy jesli np jest wylogowany to nie robisz inserta do bazy ale zamykasz okno bez zadnej akcji natomiast jezeli jest zalogowany to robisz insert do bazy i zamykasz okno czyli reasumujac:

1. klikasz zamkniecie zakladki
2. sprawdzasz czy w bazie danych uzytkownik jest zalogowany
3. jezeli jest zalogowany robisz insert ajaxem do bazy danych o evencie i zamykasz zakladke
4. jezeli jest juz wylogowany(bo juz np z tych dwoch zakladaek jedna zamknal) to zamykasz sama zakladke

Jezeli cos zle zrozumialem co miales na mysli to mnie popraw.
reseet
Twoje rozwiązania sprawdziło by się gdybym miał problem z zdublowanymi logami wylogowania użytkownika.

1.User zalogował się do systemu (mojastrona.pl).
2.User otworzył dwa elementy systemu w dwóch zakładkach (strona główna - mojastrona.pl/index, poczta - mojastrona.pl/mail).
3.User zamyka jedną zakładke.
- system sprawdza czy User ma otwartą jeszcze jedna zakładke dot. tego systemu:
jeśli TAK: zamyka zakładke bez AJAXa,
jesli NIE: zamyka zakładke z AJAXem = insert z info o wylogowaniu.
pasman
[quote name='reseet' date='22.06.2015, 13:20:37 ' post='1162570']
Gdy użytkownik ma otwarty system w dwóch zakładkach i zamknie jedna z nich to system traktuje to jako wylogowanie. Prawidłowo powinien zadziałać w momencie gdy nie ma już więcej otwartych zakładek z tym systemem.

[html]

może zapisać w cookie ilość otwartych sesji ?
jeżeli ilość > 1 to nie wylogowuje tylko zmniejsza cookie.

reseet
@pasman to jak w takim razie wyłapać moment w którym użytkownik otwiera w nowym oknie?
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.