Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][JavaScript][PHP]Rejestracja zamknięcia okna/zakładki
reseet
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.06.2015

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
rad11
post
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


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.
Go to the top of the page
+Quote Post
reseet
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.06.2015

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


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.
Go to the top of the page
+Quote Post
pasman
post
Post #4





Grupa: Zarejestrowani
Postów: 70
Pomógł: 4
Dołączył: 16.03.2012

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


[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.

Go to the top of the page
+Quote Post
reseet
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.06.2015

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


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