Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Logowanie - Czy aby nie za dużo warunków?, Pierwszy tak poważny skrypt - prosze o opinię.
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Napisałem skrypt rejestracji (to było banalne) i zacząłem się bawić ze skryptem do logowania. Niestety, tu już było trochę gorzej ale po paru łądnych godzinach dałem rade. Teraz mam jedno pytanie: Czy aby nie za dużo instrukcji warunkowych?

Funkcja wygląda mniej-więcej tak:

jeśli formularz wypełniony dobrze {
-jeśli login istnieje w bazie{
--jeśli hasło podane w formularzu jest takie samo jak to zakodowane w bazie dla danego loginu{
---jeśli jest już zalogowany{
---}
---jeśli NIE jest zalogowany{
---}
--}
-}

Logowanie opiera się na stworzeniu ciastka z danymi:
1. kod sesji (te składa się między innymi z aktualnego czasu i adresu itp. a to wszystko podwójnie zaszyfrowane odmiennymi metodami)
2. Login pobrany z formularza

Tylko teraz obojętnie co chce zrobić związanego z wymuszeniem logowania, musze podać trzy warunki i to trochę mi sie wydaje nie takie jak powinno.
Gdy użytkownik sie wylogowuje to kod sesji w ciastku ustawia się na 'brak_sesji' a sesja w bazie danych na 1.
Przykład: System komentarzy jest dostepny tylko dla zalogowanych i mam funkcję if/elseif, która sprawdza czy jest zalogowany.

Jeśli użytkownik nie jest zalogowany (Wszystko w instrukcji if):
1. Sprawdzenie czy sesja z ciastka i z bazy są różne
2. Sprawdzenie sesja jest rózna 'brak_sesji'
3. sprawdzenie czy sesja w bazie wynosi 1 (podczas wylogowania w bazie sesja dla danego użytkownika przyjmuje wartość 1 aby zapobiec błędom, gdy ciastko nie będzie zawierało żadnych danych. Bo podczas porównywania ciastka z bazą, tutaj i tutaj będzie pusty wynik więc tak na dobrą sprawę będzie zalogowany - dlatego też tak dużo warunków)

Jeśli użytkownik jest zalogowany(wszystko w instrukcji elseif):
1. Sprawdzenie czy sesja z ciastka i z bazy są takie same
2. Sprawdzenie czy sesja z ciastka nie jest równa 'brak_sesji'


Teraz moje pytanie: Można się czegoś pozbyć, żeby było mniej kodu? Lub co ewentualnie zamienić na co, żeby było prościej i szybciej bez utraty 'jakości(?)' kodu?

Ja wiem, "program nie zrobi tego czego nie przewidzi jego Twórca", dlatego tez tak dużo warunków. testowałem już chyba wszystkie możliwe scenariusze, które mogą wystąpić i podczas logowania i podczas sprawdzania czy jest zalogowany aby wyświetlić formularz dla komentarzy.

Ten post edytował adbacz 10.05.2011, 13:45:33
Go to the top of the page
+Quote Post
kylu31
post
Post #2





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 25.03.2011

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


z tego co wiem to możesz połączyć sprawdzanie loginu i hasla razem (IMG:style_emoticons/default/smile.gif) chyba tekstem or (IMG:style_emoticons/default/smile.gif) tzn : ($login or $haslo) (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kadlub
post
Post #3





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


Cytat(kylu31 @ 11.05.2011, 17:58:13 ) *
z tego co wiem to możesz połączyć sprawdzanie loginu i hasla razem (IMG:style_emoticons/default/smile.gif) chyba tekstem or (IMG:style_emoticons/default/smile.gif) tzn : ($login or $haslo) (IMG:style_emoticons/default/smile.gif)

raczej and bo suma daje 1 wtedy jak jedno jest prawdziwe czyli jak poda dobry login a złe hasło to go zaloguje i odwrotnie tak samo
Go to the top of the page
+Quote Post
adbacz
post
Post #4





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


W sumie to zrobiłem teraz tak, że do sesji zapisuję userID i hash wygenerowany z hasła, loginu, adresu IP oraz aktualnej godziny z sekundami (nie jest w stanie się powtórzyć).

Tylko teraz mam problemy ze sprawdzaniem, czy ten ktoś jest zalogowany bo dość dużo sytuacji trzeba sprawdzić. Np. przy pokazywaniu formularza z komentarzem.

Czy tak na oko bardziej kumatych i "dłużej piszących" taki skrypt jest... powiedzmy dobry? Czy lepiej obrać jakiś inny tor i pisać np z sesją zapisywaną w DB dla danego numeru IP?
Go to the top of the page
+Quote Post
konole
post
Post #5





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 21.03.2006
Skąd: Warszawa

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


Cytat
Tylko teraz mam problemy ze sprawdzaniem, czy ten ktoś jest zalogowany bo dość dużo sytuacji trzeba sprawdzić. Np. przy pokazywaniu formularza z komentarzem.
Chyba najlepiej jest stworzyć funkcję / metodę w klasie i sprawdzać z np. $user->isLogged() zwracającą true / false.

Ten post edytował konole 11.05.2011, 17:43:52
Go to the top of the page
+Quote Post
adbacz
post
Post #6





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Zrobiłem tak konole, ale ta funkcja nie działa w CI. Najlepsze jest to, że działa w osobnym pliku *.php.
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: 14.09.2025 - 22:23