Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie - Czy aby nie za dużo warunków?
Forum PHP.pl > Forum > PHP
adbacz
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.
kylu31
z tego co wiem to możesz połączyć sprawdzanie loginu i hasla razem smile.gif chyba tekstem or smile.gif tzn : ($login or $haslo) smile.gif
kadlub
Cytat(kylu31 @ 11.05.2011, 17:58:13 ) *
z tego co wiem to możesz połączyć sprawdzanie loginu i hasla razem smile.gif chyba tekstem or smile.gif tzn : ($login or $haslo) 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
adbacz
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?
konole
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.
adbacz
Zrobiłem tak konole, ale ta funkcja nie działa w CI. Najlepsze jest to, że działa w osobnym pliku *.php.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.