Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] problem z zabezpieczeniem logowania
Forum PHP.pl > Forum > Przedszkole
intermediate
Mam takie pytanie. Zrobiłem jak umiałem w php/sql stronę logowaniem i rejestracją użytkowników. Mam na przykład do systemu logowania 3 osobne pliki (main_login z formularzem, checklogin do sprawdzania danych, oraz login_success to stronka na którą jestem przekierowywany jak sie poprawnie zaloguje). Wszystko pięknie tylko zapomniałem o jednym:) Jak wpisze w pasku adresu bezpośrenio link do stronki login_success, który mam na serwerze to jestem zalogowany. Tak nie może byćsmile.gif

I jeszcze jedno. czy da się jakoś razem połączyć formularz z wpisywaniem danych i wysyłaniem plików na serwer. Chodzi mi o to, żeby za pomocą jednego przycisku były przesyłane zarówno pliki jak i dane z formularza:

Formularz uploadu:

  1. <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  2. Upload Image<input type="file" id="userfile" name="userfile">
  3. <input type="submit" name="upload" value="Upload">
  4. </form>


Formularz do wpisywania danych:

  1. <form action = "blebleble" method = "POST">
  2. Imie<br/>
  3. <input type="text" name="imie" ><br/>
  4. Nazwisko<br/>
  5. <input type="password" name="nazw" ><br/><br/>
  6.  
  7. <input type="submit" value="Wyslij">
  8. </form>


dzieki z góry za pomoc
toffiak
Skoro przechodząc do strony login_success jesteś zalogowany to znaczy że na stronie nie jest sprawdzane czy użytkownik jest zalogowany, możesz to rozwiązać dodając do sesji informacje, na przykład login, zalogowanego użytkownika, gdy w sesji nie będzie informacji o loginie to znaczy że użytkownik nie jest zalogowany i powinien został przekierowany do strony logowania/rejestracji.

Dane wpisywane i ładowanie plików mozna połączyć w jeden formularz.
ciekawskiii
Rozumiem ze formularz wysylasz przez POST wiec na stronie gdzie sprawdza dane daj
  1. if(isset($_POST['$zmienna']))
  2. { //sprawdzam dane
  3. }else{
  4. //wysylam do strony logowania gdy formularz niewypelniony
  5. header('Location: logowanie.php');
  6. }

Sprawdzaj tez czy formularz pusty - empty i filtruj dane i podobnie na stronie gdzie zalogowano poprawnie to sprawdzaj czy ktos jest zalogowany, co do plikow i tejstu to input type="file" dodaj normalie do formularza
kuba_pilach
Sorki, że się czepiam, ale te logowanie zrobiłeś trochę bezsensu... po co aż trzy pliki na to?
Wystarczy jeden przeznaczyć na logowanie... gdzieś widziałem niezły tutorial...
Jak znajdę to ci wyślę linka...
benio101
W checklogin, jeśli zalogowano pomyślnie, dajesz np.
  1. $_SESSION[loginok]=1;
W login_success dajesz na początku:
  1. $_SESSION[loginok]?$_SESSION[loginok]="":die("Precz, oszuście");
intermediate
dzięki, działa już nawet, jak ktoś otwiera bezpośrednio login_succes to wyskakuje "Precz, oszuście",
tylko teraz znowu jak jestem już na stronie login_success, wystarczy że odświeżę stronę to mi wyskakuje mi również ""Precz, oszuście". Tak chyba nie może być. Powinienem nadal pozostać na login_success.
ciekawskiii
Jednym slowem, namieszales. Cos gdzies zle sprawdzasz
benio101
OK. To pierwszy krok za nami. Oczywiście, jak zacząłem, to dokończę robotę, tj. pomogę Ci, aż będzie dobrze.
Myślałem, że chodzi Ci o jednorazowy dostęp do strony login_success i że na niej ustawiasz parametr, że zalogowano.

W takim razie nie usuwaj sesji po jednokrotnym zalogowaniu:

Zamiast
  1. $_SESSION[loginok]?$_SESSION[loginok]="":die("Precz, oszuście");
daj
  1. if(!$_SESSION[loginok])die("Precz, oszuście");

Wtedy po zalogowaniu, tak długo login_succes będzie się pokazywać , aż nie wygaśnie sesja, czyli Użytkownik nie wyłączy przeglądarki, dostępu do komputera ani samego komputera.
Gdy sesja wygaśnie, np. właśnie poprzez zamknięcie przeglądarki, to będzie on musiał się ponownie zalogować.

Przy wylogowywaniu dodaj
  1. $_SESSION[loginok]="";
Wtedy wszystko będzie gitas.

Następny krok, to zamiast dawać komunikat Precz oszuście, przekieruj na stronę logowania z informacją, że sesja wygasła i prosisz o ponowne zalogowanie się, gdyż jeśli Użytkownikowi wygaśnie sesja, np. na chwilę wyłączą prąd, to dostanie komunikat "Precz oszuście" i może się zniechęcić, a nie będzie wiedział dlaczego, bo się na tym po prostu nie zna. Dlatego myślę, że o wiele lepiej jest dać przekierowanie na stronę logowania z informacją o konieczności ponownego zalogowania się. Tak na marginesie: To precz oszuście podałem jako przykład, nie najlepszy, lepiej właśnie przekierować na stronę logowania z notką, dlaczego każesz się ponownie logować.

Np.:
checklogin:
  1. if(!$_SESSION[loginok])die("<script>self.location.href='main_login.php?sesja=wygasla'</script>");

mainlogin:
Dodajesz gdzieś kod o treści:
  1. if($_GET["sesja"]=="wygasla")echo "Sesja wygasła. Proszę się ponownie zalogować.";
który poinformuje Użytkownika o tym, że ma się ponownie zalogować. Oczywiście treść możesz zmienić, sformatować i dodać, gdzie zechcesz.

Jeśli masz jeszcze jakieś pytania, to postaram Ci odpowiedzieć, jeśli źle Cię zrozumiałem, opisz dokładniej. Obiecuję, że postaram się pomóc.
intermediate
dzieki wielkie za pomoc, teraz działa wszystko gites. A komunikat zamierzałem zmienićsmile.gif
benio101
No, to się bardzo cieszę smile.gif
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.