Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wielokrotne logowanie
R4D3K
post
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. (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)

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:

  1. <?php
  2. if (isset($_SESSION['id'])) {
  3. // pokaz galerię
  4. }
  5. else {
  6. // powiedz userowi że musi się zalogować
  7. }
  8. ?>


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
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 38)
maly_swd
post
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:)
Go to the top of the page
+Quote Post
R4D3K
post
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
Go to the top of the page
+Quote Post
Wicepsik
post
Post #4





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Może identyfikacja przez MAC ?
1 konto = 1 MAC

Ten post edytował Wicepsik 30.06.2009, 14:53:18
Go to the top of the page
+Quote Post
kfc4
post
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
Go to the top of the page
+Quote Post
MateuszS
post
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
Go to the top of the page
+Quote Post
kfc4
post
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
Go to the top of the page
+Quote Post
MateuszS
post
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
Go to the top of the page
+Quote Post
dworakex
post
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 30.06.2009

Ostrzeżenie: (10%)
X----


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





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 30.06.2009

Ostrzeżenie: (10%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
R4D3K
post
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
Go to the top of the page
+Quote Post
erix
post
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. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
R4D3K
post
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 ?
Go to the top of the page
+Quote Post
pgrzelka
post
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował pgrzelka 30.06.2009, 22:45:31
Go to the top of the page
+Quote Post
erix
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) )
Go to the top of the page
+Quote Post
R4D3K
post
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:
  1. <?php
  2. if (isset($_POST['login'])) {
  3. // user chce się zalogować
  4.  $dane=mysql_fetch_array(mysql_query('SELECT * FROM session WHERE id_user=SELECT id FROM users WHERE login=$_POST['login'] AND pass=md5($_POST['pass']))
  5.    if ($dane['sid]==session_id()) {
  6.    // Mam cię spryciarzu teraz grzecznie załóż konto i się zaloguj
  7.  }
  8.  else {
  9.   // OK zaloguj się i uaktualnij tabelę session
  10.  }
  11. }
  12. ?>


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
Go to the top of the page
+Quote Post
erix
post
Post #18





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. skrypt jest dziurawy (SQL Injection)
  2. MD5 też można "odwrócić"
  3. Cytat
    Jak narazie wymyśliłem, taki oto sposób wykluczenia wielokrotnego logowania w 1 czasie:
    • ukryte ciastko z długim czasem ważności
    • sprawdzanie User-Agent
Tyle mi na razie przyszło do głowy
Go to the top of the page
+Quote Post
R4D3K
post
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ń
Go to the top of the page
+Quote Post
MolTAR
post
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.
Go to the top of the page
+Quote Post
R4D3K
post
Post #21





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

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


A jeśli użytkownik nie kliknie "WYLOGUJ" tylko zamknie przeglądarkę to i dalej zostanie w bazie zalogowany=1 ?
Go to the top of the page
+Quote Post
MolTAR
post
Post #22





Grupa: Zarejestrowani
Postów: 17
Pomógł: 2
Dołączył: 15.08.2007
Skąd: Nowy Targ

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


zdarzenie zamykania przeglądarki z tego co wiem można chyba jakoś w js przechwycić i wtedy ajaxem zmienić wartość 'zaloguj' na 0
Go to the top of the page
+Quote Post
bełdzio
post
Post #23





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


Cytat(R4D3K @ 2.07.2009, 23:18:33 ) *
A jeśli użytkownik nie kliknie "WYLOGUJ" tylko zamknie przeglądarkę to i dalej zostanie w bazie zalogowany=1 ?

zawsze możesz zapisać czas ostatniej akcji i co jakiś czas odpalać GC
Go to the top of the page
+Quote Post
R4D3K
post
Post #24





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

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


GC ? chodzi o tą odśmieciarkę ? Bełdzio możesz rzucić jakimś kodem ?
Go to the top of the page
+Quote Post
erix
post
Post #25





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
zdarzenie zamykania przeglądarki z tego co wiem można chyba jakoś w js przechwycić

Taa... W praktyce już nie jest tak idealnie...

Cytat
GC ? chodzi o tą odśmieciarkę ?

Nie; po prostu ustalasz czas nieaktywności, po którym sesja jest uznawana za martwą.
Go to the top of the page
+Quote Post
MolTAR
post
Post #26





Grupa: Zarejestrowani
Postów: 17
Pomógł: 2
Dołączył: 15.08.2007
Skąd: Nowy Targ

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


Możesz też dać użytkownikowi ciasteczko na taki czas po jakim następuje wylogowanie po nieaktywności. Jeśli zaloguje się, później wyłączy przeglądarkę i znów włączy Twoją stronę to będzie się mógł zalogować pod warunkiem że będzie miał to ciasteczko jeśli go nie będzie miał to komunikat 'jesteś już zalogowany'. Problem w tym, że jak ktoś usunie ciasteczka to nie wejdzie przez jakiś czas na stronę. Ale to chyba nie jest tak bardzo prawdopodobne, bo ludzie nie usuwają ciasteczek tak często, a większość nawet nie wie co to jest.
Go to the top of the page
+Quote Post
R4D3K
post
Post #27





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

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


Dobra, ale tak myślałem żeby zamiast ciasteczka użyć session_cache_expire()" title="Zobacz w manualu PHP" target="_manual
Wyglądały by to tak:
* ustawiam sobie czas np 30 minut "życia sesji"
* przy logowaniu zapisuje sobie do zalogowany= time(), jeśli będzie zero znaczy ze nie jet zalogowany jeśli będzie coś innego =>zalogował się
* przy próbie logowania sprawdzam pole zalogowany i porównuje czasy.
* Jeśli czas zalogowania jest mniejszy jak 30 minut to znaczy, że user jest zalogowany już.

Tylko mam takie pytanie czy da się sprawdzić, ile czasu jeszcze zostało do wygaśnięcia danej sesji ?
Go to the top of the page
+Quote Post
rzymek01
post
Post #28





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


moim zdaniem:
- sesje PHP wraz z własnym mechanizmem w bazie
- czas życia sesji
- może być regeneracja id co stronę
- w ciastku zapisujesz id sesji oraz unikalny ciąg znaków skrócony np. przez sha1, w którym zbierasz wszystkie dane przy logowaniu jakie się da - user agent, ip, Accept, Accept-Language, Accept-Charset, Accept-Encoding (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
bełdzio
post
Post #29





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


takie cos mi jeszcze w lozku przyszlo do glowy ;-)

user sie loguje -> zapisujesz sesje w bazie -> kolejny user się loguje -> spr czy w bazie jest sesja użytkowniwka o takim samym ID -> jeśli jest to ją kasujemy

w taki sposób zawsze bedzie zalogowany jeden user + za kazdym razem jak bedzie chcial sie zalogowac ktos na jego dane to go wyloguje :-)

jak będzie "martwa" sesja to nic się nie stanie, jak będzie zalogowany inny user to się troche podenerwuje i przemyśli kwestię dawania swoich danych innym :-)
Go to the top of the page
+Quote Post
fander
post
Post #30





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

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


Cytat(bełdzio @ 3.07.2009, 12:20:40 ) *
takie cos mi jeszcze w lozku przyszlo do glowy ;-)

user sie loguje -> zapisujesz sesje w bazie -> kolejny user się loguje -> spr czy w bazie jest sesja użytkowniwka o takim samym ID -> jeśli jest to ją kasujemy

w taki sposób zawsze bedzie zalogowany jeden user + za kazdym razem jak bedzie chcial sie zalogowac ktos na jego dane to go wyloguje :-)

jak będzie "martwa" sesja to nic się nie stanie, jak będzie zalogowany inny user to się troche podenerwuje i przemyśli kwestię dawania swoich danych innym :-)


Albo inaczej gdy znajdzie użytkownika o takim samym id ale innej sesji to wyświetla komunikat o tym ze ktoś wisi na jego koncie.
Go to the top of the page
+Quote Post
R4D3K
post
Post #31





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

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


Cytat
Albo inaczej gdy znajdzie użytkownika o takim samym id ale innej sesji to wyświetla komunikat o tym ze ktoś wisi na jego koncie.

A co z session fixiaton i koniecznością session_regenrate_id()" title="Zobacz w manualu PHP" target="_manual

Ten post edytował R4D3K 4.07.2009, 09:03:46
Go to the top of the page
+Quote Post
crackcomm
post
Post #32





Grupa: Zarejestrowani
Postów: 184
Pomógł: 6
Dołączył: 23.02.2008
Skąd: Katowice

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


Gdy użytkownik się loguje SID jest dodawany do bazy i do cookie, gdy to się zgadza może sobie chodzić. Gdy ktoś następny się zaloguje (użytkownik2) to znów zapisuje się SID (inny niż poprzedni) w bazie i w cookiesach. Użytkownik już nic nie może zrobić bo jest wylogowany i musi się znów zalogować, loguje się wtedy wylogowuje użytkownika2 itd. itd. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
rzymek01
post
Post #33





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


Cytat(crackcomm @ 4.07.2009, 20:12:55 ) *
Gdy użytkownik się loguje SID jest dodawany do bazy i do cookie, gdy to się zgadza może sobie chodzić. Gdy ktoś następny się zaloguje (użytkownik2) to znów zapisuje się SID (inny niż poprzedni) w bazie i w cookiesach. Użytkownik już nic nie może zrobić bo jest wylogowany i musi się znów zalogować, loguje się wtedy wylogowuje użytkownika2 itd. itd. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

ale sęk w tym, że to za mało, bo - z tego co zrozumiałem - są to zaprzyjaźnieni userzy i mający nieco pojęcie o kompach, więc jeden może podać drugiemu całe ciastko i już może chodzić jako zalogowany

sposób @bełdzia jest prawie idealny, bo zostaje możliwość cały czas chodzenia jednym userem (ale tylko jeden w jednym czasie), więc do tego bym dodał zbieranie i sprawdzanie user-agentów itp. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Kethrax
post
Post #34





Grupa: Zarejestrowani
Postów: 80
Pomógł: 3
Dołączył: 9.12.2006
Skąd: Kraków

Ostrzeżenie: (10%)
X----


Witam,

Ja bym zrezygnował wogóle z cookies.

User loguje się (login, hasło) jeżeli poprawne logowanie w bazie zapisuje się "secretUserCode" generowany jest tak:
  1. <?php
  2. $userSecretCode = md5($usrPass.session_id().date("YmdH:i:s"));
  3. //dodanie do bazy -> $userSecretCode
  4. $_SESSION['userSecretCode'] = $userSecretCode;
  5. ?>


Później sprawdzanie przy otwieraniu każej strony czy $_SESSION['userSecredCode'] jest identyczny z tym w bazie.
Jeżeli ktoś będzie się próbować zalogować na już zalogowanego usera, komunikat że już jest ktoś zalogowany.
  1. <?php
  2. if (userSecretCode z bazy != "locked") throw new Exception("Nie można zalogować");
  3. else { //logowanie }
  4. ?>

Przy wylogowaniu userSecretCode jest zastępowany np. "locked" i session_destroy();

W przypadtku gdy user nie kliknie wyloguj, Ajax.

Ten post edytował Kethrax 5.07.2009, 12:30:28
Go to the top of the page
+Quote Post
crackcomm
post
Post #35





Grupa: Zarejestrowani
Postów: 184
Pomógł: 6
Dołączył: 23.02.2008
Skąd: Katowice

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


Cytat(rzymek01 @ 5.07.2009, 09:19:39 ) *
ale sęk w tym, że to za mało, bo - z tego co zrozumiałem - są to zaprzyjaźnieni userzy i mający nieco pojęcie o kompach, więc jeden może podać drugiemu całe ciastko i już może chodzić jako zalogowany

sposób @bełdzia jest prawie idealny, bo zostaje możliwość cały czas chodzenia jednym userem (ale tylko jeden w jednym czasie), więc do tego bym dodał zbieranie i sprawdzanie user-agentów itp. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

W sumie to co napisał Bełdzio...to jest to samo co napisałem ja (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
rzymek01
post
Post #36





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


Cytat(crackcomm @ 5.07.2009, 15:24:20 ) *
W sumie to co napisał Bełdzio...to jest to samo co napisałem ja (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

z tego powodu, że @Bełdzio pisał pierwszy, to chyba Ty napisałeś to, co już wcześniej napisał Bełdzio, ale mówię, że jeszcze ja bym sprawdzał inne dane, które da się wyciagnąc, np. user-agent

@Kethrax, "Ja bym zrezygnował wogóle z cookies."
a sid w pasku adresu? (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
bełdzio
post
Post #37





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


Cytat(rzymek01 @ 5.07.2009, 15:30:51 ) *
z tego powodu, że @Bełdzio pisał pierwszy, to chyba Ty napisałeś to, co już wcześniej napisał Bełdzio, ale mówię, że jeszcze ja bym sprawdzał inne dane, które da się wyciagnąc, np. user-agent


inne dane nic nie dadzą bo nie są unikalne, a z tego co kojarze to problem polegał na tym, żeby jednocześnie nie można było zalogować się na jeden login przez wielu userów, co też moje rozwiązanie robi ;-)
Go to the top of the page
+Quote Post
R4D3K
post
Post #38





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

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


Dzięki Wam za odpowiedzi.
Najbardziej podoba mi się sposób Bełdzia, zapisanie sid sesji do bazy, też o tym pisałem w pierwszym poście, tylko panowie z tym sposobem jest jeden ból: przesłanie linka z id sesji np http://example.com?PHPSESSID=... Użytkownicy są cwani, ale nie na tyle żeby sobie ciastka przesyłać, wiem bo mi kolega co zgłaszał ten problem przesłał właśnie linka z sesją przez gg.
Jeśli dodam od razu po sprawdzeniu czy user jest zalogowany, session_regenerate_id to user który działa na stronie jako 2 wyloguje usera 1 ( dobrze mówię ?), i pytanie czy ta reguła w pliku htaccess :
Kod
php_value session.use_only_cookies 1
php_value session.use_trans_sid 0

Rozwiąże problem przesyłania id sesji w linku ? Nawet jak user wyłączy ciastka ?
Go to the top of the page
+Quote Post
rzymek01
post
Post #39





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


Cytat(R4D3K @ 5.07.2009, 23:27:28 ) *
Nawet jak user wyłączy ciastka ?

nie będzie miał możliwości zalogowania się (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 25.12.2025 - 08:35