![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam, na początku chce zaznaczyć, że to nie jest problem poruszany n-ty raz, przeszukałem koło 100 tematów na tym forum dotyczących logowania i nie znalazłem odpowiedzi, google milczało, chyba że nie wiem jak zadać pytania dla wujka google, jeśli tak to przepraszam.
![]() Posiadam stronę na której jest galeria ze zdjęciami i aby można było je obejrzeć użytkownik musi być zalogowany i mój problem polega na tym iż 1 osoba się rejestruje i podaje reszcie swój login i hasło i jednocześnie oglądają zdjęcia. Z praktyki wiem że w jednym czasie na 1 loginie przegląda zdjęcia nawet 4 użytkowników jednocześnie. Chcę to wyeliminować i zmusić każdego z tych użytkowników to założenia konta. Na podstronie z galerią sprawdzam, czy osoba jest zalogowana za pomocą sesji:
próbowałem używać session_regenerate_id()" title="Zobacz w manualu PHP" target="_manual , także dodałem regułę do pliku htaccess: Kod php_value session.use_only_cookies 1 php_value session.use_trans_sid 0 Oczywiście pozwoliło to wyeliminować spryciarzy, którzy przesyłali link już po zalogowaniu, ale dalej mojego problemu to nie rozwiązało. Myślałem o tym,żeby stworzyć tabelę z id_usera i id_session i sprawdzać co każde wylistowanie zdjęć czy id sesji zgadza się z orginałem. Jednak czy to pomoże czy tylko obciąży serwer ? Czy może lepiej wysyłać jakieś ciasteczko, czy też sprawdzać odstęp czasu pomiędzy logowaniami czy w jakiś sposób sprawdzać czy dany użytkownik jest zalogowany ? (jeśli tak to w jaki ?) Prosiłbym tych, którzy spotkali się z tym problemem, żeby opisali jak sobie z tym poradzili, może ktoś wklei jakiś kawałek kodu Z góry dzięki |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
Podczas logowania zapisz IP na ktorym jest zalogowany dany login:) Jesli login nie zgadza sie z IP to musi sie zalogowac:)
-------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
@maly_swd to za bardzo problemu nie rozwiąże, bo przeważnie logują się na 1 loginie Ci z tego samego "osiedla" co się wiąże z tym, żę mają takie samego providera -> ten sam adres IP. Wiem to po logach.
Ten post edytował R4D3K 30.06.2009, 14:32:13 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
Może identyfikacja przez MAC ?
1 konto = 1 MAC Ten post edytował Wicepsik 30.06.2009, 14:53:18 -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 18 Dołączył: 7.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zapisujesz w bazie login i id sesji. Jak ktoś się loguje to sprawdzasz czy taki login już istnieje w tabeli (po np. pół godzinie nie aktywności kasujesz rekord (sprawdzasz pole w którym zapisujesz ostatnią aktywność)), jak tak to porównujesz z id sesji, jeżeli są różne to wywalasz komunikat, że musi mieć własny login, jak się zgadza to przepuszczasz. Aby zapobiec użytkownikom, wyłączającym komputer bez wylogowania i włączającym go za 15 minut możesz w ciasteczkach trzymać coś indywidualnego np. time+nazwa przeglądarki i to porównywać zamias id sesji.
Ja kiedyć porówynywałem ciasteczko z zawartością w bazie, rekord kasowałem po 30 minutach nie aktywności (razem z ciasteczkiem). Ten post edytował kfc4 30.06.2009, 14:56:14 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Zrob przy rejestracji ciasteczko ktore tam ma czas time()+9999999999999999 i potem sprawdzaj przy logowaniu czy to ciacho istnieje jak nie to niech koles spieprza
-------------------- O! Zimniok :P
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 18 Dołączył: 7.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mateusz: nie wypali pomysł bo:
-zmiana komputera; -przeglądarki; -format; -logowanie u kogoś innego; -wyczyszczenie danych prywatnych -i jeszcze parę innych |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
kfc4,
trzeba by sie nad tym glebiej zastanowic -------------------- O! Zimniok :P
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 Pomógł: 1 Dołączył: 30.06.2009 Ostrzeżenie: (10%) ![]() ![]() |
Do tabeli z userami dodajesz pole "sid" gdzie zamieszczasz identyfikator sesji i pole "time" gdzie wstawisz czas w timestamp. Przy logowaniu każdy dostaje sida, którego dodajemy do bazy danych. Jeśli aktualny timestamp będziewiększy od "time"+1800 (czyli jesli przez pol godziny nioe będzie zadnej akcji" to zmieniasz "sid" na 0. Przy logowaniu sprawdzamy czy "sid"==0. Dodajesz też opcję wyloguj, która też ustawia SID na 0.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
@Wicepsik
Jak zrobić porównywanie adresu MAC w PHP ? @dworakex Zapisywanie w tabeli id sesji, też na tym myślałem, ale tu pojawia się problem z początku, osoba nie zalogowana uzyska dostęp tam gdzie nie powinna. Wystarczy się zalogować, wyłączyć cookie i przesłać komuś linka z PHPSESSID, także trzeba co każde wyświetlenie strony korzystać z session_regenerate_id(), co wyklucza porównanie z id sesji w bazie. @MateuszScirka Cytat ]Zrob przy rejestracji ciasteczko ktore tam ma czas time()+9999999999999999 i potem sprawdzaj przy logowaniu czy to ciacho istnieje jak nie to niech koles spieprza Właśnie do mnie wchodzą tacy cfaniacy co sobie z tym radzą. Ten post edytował R4D3K 30.06.2009, 15:28:10 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 6 Pomógł: 1 Dołączył: 30.06.2009 Ostrzeżenie: (10%) ![]() ![]() |
Dlaczego nei regenerować id? Albo wymusić stosowanie ciasteczek, albo możesz co 10 kliknięć robić "Wpisz haslo:". W każdym razem, mogą hasło sobie popodawać, to wtedy masz znoka, będą naraz wszyscy
![]() |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hmmm no tak regenerować id sesji mogę to co wtedy z zapisywaniem id sesji do bazy za każdym razem to robić ? Trochę chyba nieoptymalne
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Może identyfikacja przez MAC ? 1 konto = 1 MAC Na głowę upadłeś? Z tego, co pamiętam, to MAC jest tylko w warstwie łącza danych. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tak PHP jako język po stronie serwera nie ma dostępu do zasobów komputera lokalnego.
@erix może wiesz jak rozwiązać ten problem ? |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 313 Pomógł: 24 Dołączył: 9.08.2008 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
temat pobierania adresu mac jest poruszony w Archiwum Pro
Temat: MAC_zamiast_IP z tymi sesjami to też nie najgorszy pomysł, zapisuj login lub ip do sesji a najlepiej obie zmienne i pilnuj aby te wartości się nie powtarzały, czyli jeśli ktoś o loginie 'maniek' jest zalogowany to przy logowaniu z innego komputera loginem 'maniek' sprawdzasz czy już taka osoba nie jest zalogowana jeśli bardzo namieszałem to przepraszam ![]() Ten post edytował pgrzelka 30.06.2009, 22:45:31 -------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Adres MAC, to kiepski pomysł, gdyż w przypadku proxy/NAT/tunelu nie masz MAC delikwenta. Poza tym, MAC da się zmienić (niektórzy wciąż żyją w błogiej nieświadomości, że się nie da
![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
@pgrzelka dzięki za info, gdyby nie ty dalej był żył w przekonaniu, że się nie da MAC adresu wyciągnąć i tyle, nawet jeśli chodzi o korzystanie w sieci lokalnej.
Może trochę naświetle problem bardziej, stworzyłem sobie stronę gdzie można znaleźć zdjęcia itp w PHP, wykupiłem płatny hosting zamieściłem pliki. Strona ma "zasięg" jeśli tego słowa można użyć, "miastowy" to znaczy zdjęcia są robione z imprez w moim mieście z tego powodu 90% ruchu na stronie pochodzi z mojego rodzimego miasta. Jeśli chodzi o dostawców usług internetowych, tam gdzie mieszkam liczą się 2 gracze: Neostrada i Vectra(taka sieć kablowa dostarczająca internet razem z kablówką). Podobnie jak Neostrada, Vectra przydziela adresy IP dynamicznie, w obrębie danej dzielnicy, czyli jedno osiedle ma na wyjściu ten sam adres IP (sprawdziłem). Jedno takie osiedle to ładna liczba użytkowników. Dlatego tak się wystrzegałem weryfikacje przez ip. Jak narazie wymyśliłem, taki oto sposób wykluczenia wielokrotnego logowania w 1 czasie: Tworzę tabelę z id_user, sid,time i gdy dany user próbuje się zalogować sprawdzam czy w tej tabeli nie ma wpisu z jego ID, jesli jest to sprawdzam, czy jego id sesji jest równe wartości pola sid, jeśli jest to każę mu się zalogować, jeśli nie to go loguje tworząc odpowiedni wpis w bazie danych. Trochę to zawiłe, więc może użyje pseudokodu:
I co myślicie czy ten sposób jest OK ? Bo ja tu widzę problem z łatwością przejęcia takiej id sesji, ponieważ session_regenerate_id()" title="Zobacz w manualu PHP" target="_manual nie będzie wykorzystywane i ciągle muszę uaktualniać wpis w tabeli session. No chyba że się mylę, lub jest jakiś sposób żeby nie przesyłac tylu zapytań. Ten post edytował R4D3K 30.06.2009, 23:29:22 |
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
dzięki erix, to że jest dziurawy to wiem już nie dodawałem tutaj zabepieczeń
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 17 Pomógł: 2 Dołączył: 15.08.2007 Skąd: Nowy Targ Ostrzeżenie: (0%) ![]() ![]() |
A nie można by do tabeli z użytkownikami dodać pola 'zalogowany'. Jeśli zaloguje się to zalogowany = 1 jeśli wyloguje to zalogowany = 0, po przekroczeniu czasu sesji tak jak wcześniej pisaliście tam zalogowany znów = 0. I sprawdzać przy logowaniu czy przy tym userze jest 'zalogowany' = 1 czy 0 jeśli 1 to wywalić komunikat: "jesteś już zalogowany".
Jeden login = jeden komputer. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 15:39 |