gargamel
24.08.2010, 12:22:08
Dokładnie jak w temacie.
Czy znacie jakiś sposób aby sprawdzić czy strona jest aktualnie otwarta na jakimś innym komputerze. Chodzi o to żeby kilku użytkowników na raz nie mogło mieć uruchomionej owej strony.
Wdzięczny będę za jakiekolwiek podpowiedzi
Blame
24.08.2010, 12:25:33
Przy logowaniu zapisujesz sobie do bazy ip, z którego użytkownik się zalogował. Jeśli jest inne to wywalasz go do logowania i system się powtarza
gargamel
24.08.2010, 12:29:24
a w jaki sposób miałoby się odbywać kasowanie ip z bazy gdy ten co oglądał wyłącza stronę ?
thek
24.08.2010, 13:10:08
Zależnie od systemu kontroli. Pomysłów może być wiele. Robisz timestamp, ip i stronę jako kolumny rekordu. Sprawdzasz czy dana strona ma już IP przypisane. Jeśli tak -> ktoś jej używa. Sprawdzasz czy to samo IP. Jeśli nie -> zablokowana przez kogoś. Jeśli dany user jest zalogowany ale czas jest dość duży, możesz ewentualnie "zdjąć" blokadę i uznawać że jest ona wolna. To takie zabezpieczenie przed: "zapomniałem się wylogować, a mam sesję ustawioną na kilka dni ważną"

Jeśli pojawiają się rekordy z tym samym IP, to usuwasz z niższym timestampem, bo to niejako historia nawigacji po stronie danego adresu IP.
gargamel
24.08.2010, 13:24:01
Tak tylko problem który ja widzę wygląda następująco:
Ktoś wchodzi na stronę -> do bazy idzie info że na owej stronie ktoś siedzi (zagadnienie dotyczy tylko jednej strony w całym systemie - do samego systemu może być zalogowanych wielu użytkowników)
Ktoś drugi próbuje wejść na tą stronę -> strona pobiera info z bazy i się okazuje że ktoś już na owej stronie siedzi. I nie można strony wyświetlić.
Problem zaczyna się dopiero przy zdejmowaniu owej blokady. Nie chce narzucać czasu który może ktoś na stronie spędzić, bo to może uniemożliwić pracę osób które będą na niej... Mogę użyć opcji onunload i przy jej pomocy usunąć z bazy blokadę, ale wiadomo jak z nią jest. Niektóre przeglądarki blokują to i owo i opcja ta nie zadziała jak np komputer zostanie odcięty od prądu, tudzież uderzy weń wielki meteor, czy coś... (poprawcie mnie jeśli się mylę)...
Nie istnieje w php jakaś funkcja która wysyła do serwera zapytanie czy dana strona jest przeglądana przez kogokolwiek? To by mi rozwiązało cały problem ....
thek
24.08.2010, 13:32:37
Takiej nie ma. Ale możesz zawsze wysyłać z AJAX dane kontrolne, które informują serwer, że strona jest u kogoś otwarta. Przykładowo co 2 minuty czy ile tam chcesz. Jeśli serwer nie dostaje odpowiedzi -> strona wolna. Innymi słowy jeśli timestamp strony w bazie jest niższy niż czas aktualny pomniejszony o limit czasu -> userowi coś padło i to blokujący-zombie.
gargamel
24.08.2010, 14:35:59
O to to to.. Coś takiego mi trzeba
To kolejne pytanie jak taka funkcja ma wyglądać i jak ją podpiąć? Bo z AJAXa to ja ani be ani me...
Chyba że to zagadnienie na oddzielny temat, to pytania nie było
thek
24.08.2010, 14:58:14
Zobacz sobie jQuery i obsługę AJAX w nim, bo jest bardzo uproszczona i nie jest to kosmos wcale. Co jakiś czas (setInterval choćby) byś wysyłał odpowiednie info na serwer jaką stronę "blokujesz".
gargamel
24.08.2010, 15:06:41
Dobra, to będę tam szukał rozwiązania, w razi co będę zasypywał lamerskimi pytaniami ;] Puki co dzięki za pomoc.
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.