Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Blokowanie podwójnego logowania, Poszukuję pomocy w zrobieniu bokowania podwójnego logowania
malpik_orginal
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 22.11.2011

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


Witam

jestem nowym użytkownikiem i nie wiem czy swój problem dobrze umieściłem jeśli nie to przepraszam i proszę o wyrozumiałość.

Pokrótce opiszę swój problem którego rozwiązania niestety nie znalazłem na forum a może po prostu słabo szukałem (IMG:style_emoticons/default/sad.gif)

Mianowicie chodzi o to że potrzebuję zrobić coś takiego żeby na jeden login i hasło nie można było się logować równocześnie.
Czyli ja jestem zalogowany a kolega który zna mój login i hasło też chce się zalogować to ma dostać " Ktoś już jest zalogowany na Twój login"

Od razu powiem że chcę to dodać już do istniejącej platformy opartej na PHP i MySql.

A jeszcze jedno przy okazji chciałem się zapytać czy jest możliwość zrobienia czegoś takiego jak zliczanie ile razy się dany użytkownik zalogował i np
po 10 razie żeby musiał zmienić hasło i np żeby 5 ostatnich haseł było przechowywane (IMG:style_emoticons/default/questionmark.gif)

Dziękuję za jakiekolwiek podpowiedzi/rady ( oczywiście wujek google też będzie radą (IMG:style_emoticons/default/biggrin.gif) )
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Co do blokady drugiego logowania to wystarczy dodać pole (na przykład "last_activity") do bazy danych do tabelki z użytkownikami. Pole to będzie datą ostatniej aktywności użytkownika - trzeba by było updateować to pole przy każdym odświeżeniu strony (z założenia) ustawiając aktualną datę. Oczywiście mówię o sytuacji gdy użytkownik jest już zalogowany.

Wylogowanie powinno wylogować użytkownika oraz ustawić "last_activity" na jakąś starą datę (na przykład 1 stycznia 2000 00:00:00 (IMG:style_emoticons/default/tongue.gif) ).

Logowanie:

Przy logowaniu sprawdzasz czy dane są prawidłowe jak zwykle oraz dodatkowo czy pole last_activity nie jest starsze od "teraz" o czas trwania sesji (na przykład 15 minut - po tym czasie sesja się nie odnowi i użytkownik i tak zostanie wylogowany). Jeżeli te warunki są spełnione, logujesz użytkownika i ustawiasz "last_activity" na teraz.

Próba logowania #2 i kolejna:

Jeżeli last_activity jest młodsze niż "teraz" - 15 minut to wyrzucasz, że ktoś jest aktualnie zalogowany.

Można do tego dodać zapamietywanie sesji, IP itp... dla bardziej zaawansowanych opcji.

Co do pytania drugiego to też żaden problem - dodaj pole "licznik" do tabelki z uzytkownikami i zwiększaj je o 1 przy każdym logowaniu danego usera. Przy logowaniu sprawdzaj też czy pole licznik jest podzielne przez liczbę logowań po których następuję zmiana hasła (licznik % 5 == 0 - na przykład). Jeżeli wychodzi na to że jest logowanie wymagające zmiany hasła - generujesz nowe hasło - stare możesz trzymać w jakiejś innej tabelce czy w jakimś innym polu ewentualnie. Hasło możesz wysłać na mail itd... to już należy do Ciebie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
redelek
post
Post #3





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Ja bym to zrobił na bazie, albo do istniejącej dodał kilka pól takich jak np: status_login i tu cyfra 1 lub 0 , podczas logowania sprawdza która jest . Jeśli 1 to odmawia zalogowania. Status się zmienia po wylogowaniu na 0.
Tak samo bym zrobił ze zmianą hasła po każdym logowaniu pobiera cyferkę z bazy dodaje 1 i zapisuje, jeśli będzie 10 to przerzuca na strone gdzie trzeba zmienić hasło.
Co prawda trzeba sie zastanowić czy takie zabezpieczenia są konieczne i czy nie utrudnią życia (IMG:style_emoticons/default/smile.gif) może wystarczy użyć md5 do "haszowania" haseł i logowanie przełączyć na https a nie na http?

Decyzje pozostawiam Tobie. To mój pomysł na Twoje problemy

Ten post edytował redelek 23.11.2011, 09:39:31
Go to the top of the page
+Quote Post
malpik_orginal
post
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 22.11.2011

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


Z wymuszaniem zmiany haseł właśnie chodzi o to aby utrudnić życie ponieważ nie chcę aby użytkownik przekazywał swój login i hasło innym i żeby miał świadomość tego że jak udostępni to będzie musiał zaraz zmieniać hasło ( może mało to jest user friendly ale ..) i myślę że rozwiązanie radelka chyba będzie prostszym odnośnie równoległego logowania.

A jeśli chodzi o przetrzymywanie użytych haseł to właśnie są one "haszowane" i nie za bardzo wiem jak zrobić mechanizm sprawdzający

Ale oczywiście dziękuje wam za sugestie
Go to the top of the page
+Quote Post
Sephirus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


@redelek - mała sugestia (IMG:style_emoticons/default/smile.gif)

Co do twojej propozycji logowania z polem 0/1 - co w przypadku gdy użytkownik zaloguje się a następnie wyłączy przeglądarkę i nie wróci na tą stronę przez miesiąc? - Nikt już nie będzie mógł się zalogować bo pole będzie miało 1 a nie będzie aktualnie zalogowanego usera - stąd moja propozycja z datą (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
gothye
post
Post #6





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


Cytat(redelek @ 23.11.2011, 09:37:03 ) *
Ja bym to zrobił na bazie, albo do istniejącej dodał kilka pól takich jak np: status_login i tu cyfra 1 lub 0 , podczas logowania sprawdza która jest . Jeśli 1 to odmawia zalogowania. Status się zmienia po wylogowaniu na 0.


Ale jeśli sesja wygaśnie samoczynnie to user nie będzie mógł się zalogować ponownie ,ponieważ dalej pole status będzie = 1 , wiec tutaj warto dodać pole last_active i porównywać z czasem trwania sesji użytkownika.
Go to the top of the page
+Quote Post
malpik_orginal
post
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 22.11.2011

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


no to faktycznie z systemem 0/1 może być problem ale może ja nie rozumiem albo jeszcze za mało kawy się napiłem jak użyć do tego znacznika czasu (IMG:style_emoticons/default/questionmark.gif)
musiała by się ta wartość non stop aktualizować


Ten post edytował malpik_orginal 23.11.2011, 11:19:38
Go to the top of the page
+Quote Post
Sephirus
post
Post #8





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Raczej tak - może nie non-stop ale albo przy każdej akcji użytkownika trzeba by dać

  1. UPDATE users SET last_activity = NOW() WHERE id=ID_USERA


albo wykonywać to raz na ileś akcji

Ten post edytował Sephirus 23.11.2011, 13:04:28
Go to the top of the page
+Quote Post
abort
post
Post #9





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


Można w mechaniźmie sesji akualizować w bazie danych pola 'last_activity' i 'logged'. I sprawdzać warunki:
- jeżeli jest zalogowany i last_activity jest mniejsze niż (ustalona odgórnie) długość sesji - zabraniać wejścia
- jeśli jest zalogowany, ale gość się nie wylogował, to robić update bazy (starego wpisu), uaktualniać w tym wpisie "logged" na OFF, apotem stworzyć nową sesję
- jeśli nie jest zalogowany, to tworzyć nową sesję

Oczywiście wszystko wiąże się z uaktualnieniami w bazie, i to w przeciągu trwania całej sesji, czyli update pola 'last_activity' musisz uaktualniać praktycznie przy otwarciu każdej nowej strony.

Sephirus: raz na ileś akcji? Niezbyt dobre imho.
Przykład: sesja ustawiona na godzinę - jeśli uaktualniasz nawet co drugą akcję, to user zaloguje się, pójdzie sobie na kawę i śniadanie (powiedzmy 30 minut), potem coś kliknie, znów nie będzie aktywny w serwisie przez kolejne powiedzmy 40 minut, i już mamy ponad 1h. Chyba że źle zrozumiałem.
Go to the top of the page
+Quote Post
malpik_orginal
post
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 22.11.2011

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


A co powiecie na wykorzystanie mechanizmu "kto jest on-line"
skoro jest coś takiego powinno się móc to wykorzystać
( nie wiem czy dobrze myślę ale skoro jest coś już gotowego to czemu tego w jakiś sposób nie wykorzystać )

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: 22.08.2025 - 12:51