Witam mam problem.Dopiero zaczynam zabawe z php a juz musze napisac system logowania oparty mysql. Czy moglby mi ktos pomoc dokladnie chodzi o to z na stronce sa miejsca na login i haslo i po kliknieciu na loguj powino sprawdzac czy taki user jest w bazie danych. Dziekuje za szybka odpowiedz:)
----------------------
Pozwoliłem sobie zmienić nazwę
wątku : )
---
~strife
Skoro musisz napisać, to znaczy, że to komercyjna zabawka. Skoro nie znasz php i mysql'a, to jak chcesz to napisać? Chcesz pomocy, czy gotowca? Jak gotowca, to nie ten dział.
1. Stwórz tabelę w bazie danych zawierającą żytkowników
2. Napisz kod, który będzie pamietał uzytkownika (np. w oparciu o mechanizm sesji w php)
3. Przy stronach, które mają być zabezpieczone umieść kod sprawdzający, czy użytkownik, który odwiedz stronę ma do tego prawo. Sprawdzasz, czy osoba przedstawiająca się przez sesję jest umieszczona w bazie danch.
Jeśli nie jesteś w stanie napisać sam, to poszukaj gotowych skryptów, ale bacz na licencje.
Jest masa ksiazek na ten temat. Mozna je już kupić za ok 30zeta
@adi2005: jeszcze jedna taka odpowiedz i zaliczysz warna
A do autoa: Czy COKOLWIEK próbowałeś już zrobić?
@scanner: Oki sorki ale jednak chciałbym wiedzieć co napisałem nie tak
---
Autor nie pytał o książki.
Pytał o konkretne zagadnienie. A to że książki są to każdy wie.
Też chcesz żeby Cie odesłać jak o coś zapytasz?
Jednym słowem: post jest zły bo nie na temat i specjalnie nabity.
A takie pytania jak to to też na PW.
~mike_mech
---
Dzięki mike-mech
~scanner
Tak probowalem sie bawic z gotowcami ale mi nie szlo. Poza tym bym wolal sam cos napisac. Mam juz gotowa baze w mysql ale nie wiem jak zaczac pisac samo logowanie.
formularz wysyla dane login i password do naszego skryptu. skrypt liczy uzytkownków w bazie majacych taki login i takie haslo pozniej dajesz if jezeli 1 tzn ze zalogowany dobrzez jezeli 0 to zle . jezeli bedzie dobrze mozeszesz wszystko wpakować do sessji ( imie,login,itp wedle uznania ) Wszystko wysylasz metoda POST z formularza rzecz jasna. nie zapomnij tez o MD5 tzn kodowanie hasła w manuali pisze wiecej
Witam,
Napiszę Ci dość szybko czym jest logowanie w php i jak przebiega, ponieważ temat logowania był wałkowany i jest bardzo długo, więc sam rozumiesz, że pisać n'ty raz to samo robi się z oporem ( przynajmniej mi ). No ale przejdźmy do rzeczy, zakładam, że pewne podstawy z php znasz takie jak tworzenie warunków, pętli, zmiennych. Jeżeli już masz ten zasób wiedzy, to przejdźmy do napisania samego skryptu logowania.
Na początku tworzymy plik o dowolnej nazwie, u mnie będzie się nazywał login.php, ten plik umożliwi stworzenie tzw. zmiennej sesyjnej odpowiadającej za zalogowanie się na stronę. O zmiennach sesyjnych możesz poczytać w manualu w dziale zmienne predefiniowane. Oczywiście, samo tworzenie zmiennej sesyjnej nie wystarczy, jest potrzebny też formularz, który umożliwi nam dowolne logowanie.
Przykładowy formularz może wyglądać w ten sposób:
<http://december.com/html/4/element/form.html method="post" action="login.php"> <http://december.com/html/4/element/input.html type="text" name="login" /> <http://december.com/html/4/element/input.html type="password" name="password" /> <http://december.com/html/4/element/input.html type="submit" value="zaloguj sie" /> </http://december.com/html/4/element/form.html>
<?php // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;) // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste. if ( ! http://www.php.net/empty( $_POST['login'] ) && ! http://www.php.net/empty( $_POST['password'] ) ) { // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla if ( $_POST['login'] == 'strife' && $_POST['password'] == 'admin' ) { // tworzymy zmienna sesyjna $_SESSION['auth'] = '1'; } else { http://www.php.net/echo 'Podales zly login badz haslo!'; } } else { http://www.php.net/echo 'Wprowadz dane do formularza :)'; } ?>
<?php if ( http://www.php.net/isset( $_SESSION['auth'] ) ) { http://www.php.net/echo 'Wiadomosc dla zalogowanego uzytkownika'; } ?>
<?php http://www.php.net/session_start(); ?>
<?php http://www.php.net/unset( $_SESSION['auth'] ); ?>
<?php $query = http://www.php.net/mysql_query("SELECT * FROM uzytkownicy WHERE `user` = '" . $_POST['user'] . "' "); $fetch = http://www.php.net/mysql_fetch_array($query); if ( $fetch ) // jesli user zostanie znaleziony w bazie { if ( http://www.php.net/md5( $_POST['pass'] ) == $fetch['haslo'] ) // jesli haslo sie zgadza { http://www.php.net/echo 'logowanie zakonczone sukcesem'; } else { http://www.php.net/echo 'Przykro mi, ale podane haslo jest bledne'; } } else { http://www.php.net/echo 'Podany uzytkownik nie istnieje w bazie danych'; } ?>
Zrobiłem takie pliki:
logowanie.html:
<http://december.com/html/4/element/html.html> <http://december.com/html/4/element/head.html> <http://december.com/html/4/element/title.html>Logowanie</http://december.com/html/4/element/title.html> </http://december.com/html/4/element/head.html> <http://december.com/html/4/element/body.html> <http://december.com/html/4/element/form.html method="post" action="sprawdz.php"> Login: <http://december.com/html/4/element/input.html type="text" name="login" /> Hasło: <http://december.com/html/4/element/input.html type="password" name="password" /> <http://december.com/html/4/element/input.html type="submit" value="zaloguj sie" /> </http://december.com/html/4/element/form.html> </http://december.com/html/4/element/body.html> </http://december.com/html/4/element/html.html>
<?php http://www.php.net/define('login', 'robert'); http://www.php.net/define('haslo', '123456'); // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;) // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste. if ( ! http://www.php.net/empty( $_POST['login'] ) && ! http://www.php.net/empty( $_POST['password'] ) ) { // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla if ( $_POST['login'] == login && $_POST['password'] == haslo ) { // tworzymy zmienna sesyjna $_SESSION['zalogowany'] = '1'; http://www.php.net/print("Zalogowany"); } else { http://www.php.net/echo 'Podales zly login badz haslo!'; } } else { http://www.php.net/echo 'Wprowadz dane do formularza :)'; } ?>
<?php http://www.php.net/session_start(); if ( http://www.php.net/isset( $_SESSION['zalogowany'] ) ) { http://www.php.net/echo 'Wiadomosc dla zalogowanego uzytkownika'; } ?>
bezpośrednio do plik.php? to czego oczekujesz że zmienna w ifie z powietrza sie wyczaruje?
ok działa oto moje pliki:
logowanie.html pomijam,
sprawdz.php
<?php http://www.php.net/define('login', 'robert'); http://www.php.net/define('haslo', '123456'); // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;) // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste. if ( ! http://www.php.net/empty( $_POST['login'] ) && ! http://www.php.net/empty( $_POST['password'] ) ) { // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla if ( $_POST['login'] == login && $_POST['password'] == haslo ) { // tworzymy zmienna sesyjna http://www.php.net/session_start(); $_SESSION['zalogowany'] = '1'; //session_register('zalogowany'); http://www.php.net/print("Zalogowany"); http://www.php.net/print("<a href="plik.php">Klik</a>"); } else { http://www.php.net/echo 'Podales zly login badz haslo!'; } } else { http://www.php.net/echo 'Wprowadz dane do formularza :)'; } ?>
<?php http://www.php.net/session_start(); //session_register('zalogowany'); if ( http://www.php.net/isset( $_SESSION['zalogowany'] ) ) { http://www.php.net/echo 'Wiadomosc dla zalogowanego uzytkownika'; http://www.php.net/print("<a href="wyloguj.php">Klik</a>"); } else { http://www.php.net/echo 'zaloguj się'; } ?>
<?php http://www.php.net/session_start(); http://www.php.net/session_destroy(); http://www.php.net/print("wylogowano"); ?>
np. zamiast
<?php http://www.php.net/print("Zalogowany"); http://www.php.net/print("<a href="plik.php">Klik</a>"); ?>
kurde rzeczywiście ;p
Ale to wynik tego że nie śpię 19h ponad i po treningu jestem.
to jeszcze tylko pytanko szybkie:
jeżeli jestem już zalogowany, jak mogę wyświetlić ID sesji??
Póki co to mi do szczęścia potrzeba
wystarczy manula przejrzeć...
http://pl.php.net/session_id
zrobiłem taki plik:
wybór.html
<http://december.com/html/4/element/html.html> <http://december.com/html/4/element/head.html> <http://december.com/html/4/element/title.html>strona startowa</http://december.com/html/4/element/title.html> </http://december.com/html/4/element/head.html> <http://december.com/html/4/element/body.html> <http://december.com/html/4/element/br.html> <? session_start(); if ( isset( $_SESSION['zalogowany'] ) ) { ?> <http://december.com/html/4/element/font.html size="6" color="blak" face="times"><http://december.com/html/4/element/center.html><http://december.com/html/4/element/b.html>Wybierz zadanie:</http://december.com/html/4/element/center.html></http://december.com/html/4/element/font.html> <http://december.com/html/4/element/br.html> <http://december.com/html/4/element/center.html><http://december.com/html/4/element/table.html height="20%" width="20%" border="1"> <http://december.com/html/4/element/tr.html><http://december.com/html/4/element/td.html align="center"> <http://december.com/html/4/element/a.html href="obliczenia.html"> kalkulator</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/tr.html><http://december.com/html/4/element/td.html align="center"> <http://december.com/html/4/element/a.html href="zapisz.html"> wysyłanie pliku </http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html></http://december.com/html/4/element/table.html></http://december.com/html/4/element/center.html> </http://december.com/html/4/element/body.html> </http://december.com/html/4/element/html.html> <? } else { header("Location: wybor.html"); } ?>
Jeżeli chcesz korzystać z kodu PHP musisz umieszczać go w plikach *.php
yhm ok będę to robił, bo myślałem że jakoś da radę w *.html zrobić.
da o ile możesz używać plików htaccess poszukaj na google co należałoby wpisać
bo ja akurat nie pamietam
Yo!
Mam pytanie: przedstawione tutaj kody do logowania dzialaja ok. W momencie w ktorym uzytkownik sie zaloguje mamy zmienna sesyjna, ktora to informuje ze jest zalogowany. Wyobrazmy sobie ze do zmiennej sesyjnej przypisuje nazwe uzytkownika powiedzmy $login. Teraz mam zmienna sesyjna $_SESSION['login'] = $login; i na jej podstawie sprawdzam czy dany uzytkownik jest zalogowany.
Wyczytalem jeszcze, ze w wypadku uzywania sesji trzeba wklepywac na poczatku dokumentu linijke session_start();
Hmmm...moje pytanie jest takie:
W pliku logowanie.php mam skrypt ktory pobiera mi wpisana z klawiatury nazwe uzytkownika, haslo i sprawdza czy w bazie danych w tabeli UZYTKOWNICY jest w kolumnie login i haslo taka sama wartosc jak ta podana przez uzytkownika. Jesli ja znajdzie to utwozy ta zmienna sesyjna $_SESSION['login']=$login; JAK TA ZMIENNA PRZEKAZYWAC NA KOLEJNE PODSTRONY DO KTORYCH BEDE MIAL ODNOSNIKI? W URL raczej odpada bo to kazdy przeciez zobaczy
Dzieki
<?php $query = http://www.php.net/mysql_query("SELECT * FROM uzytkownicy WHERE `user` = '" . $_POST['user'] . "' "); $fetch = http://www.php.net/mysql_fetch_array($query); if ( $fetch ) // jesli user zostanie znaleziony w bazie { if ( http://www.php.net/md5( $_POST['pass'] ) == $fetch['haslo'] ) // jesli haslo sie zgadza { http://www.php.net/echo 'logowanie zakonczone sukcesem'; $_SESSION['login'] = '1'; // dodawanie ról w momencie poprawnego zalogowania $query = http://www.php.net/mysql_fetch_array( http://www.php.net/mysql_query("SELECT * FROM maski_dostepu WHERE id = " . $fetch['mask'] . " ") ); $_SESSION['has_admin'] = $query['has_admin']; /** * potem sprawdzac czy ktos ma gdzie dostep przykladowo czy Janek moze * wejsc na strone x sprawdzasz tak * if ( ! empty( $_SESSION['has_admin'] ) ) * { * echo 'masz dostep'; * } */ } else { http://www.php.net/echo 'Przykro mi, ale podane haslo jest bledne'; } } else { http://www.php.net/echo 'Podany uzytkownik nie istnieje w bazie danych'; } ?>
Wlasnie sie przekonalem, ze zmienne sesyjne u mnie nie dzialaja:/
Zainstalowalem serwer Apache u siebie na kompie. Jak je wlaczyc?
Yo!
Jednak sesje dzialaja. Jednak mam pewne pytanie:
Jak przepisac zmienna z tablicy $_SESSION?
Bo np. mam zmienna
i proba
<?php $_SESSION['login_ok']; ?>
nie przynosi pozytywnych rezultatow :/
<?php $login = $_SESSION['login_ok']; ?>
A jakich rezultatów się spodziewasz, musi działać.
<?php http://www.php.net/session_start(); // moze zapomniales? $_SESSION['login'] = 'dupa'; $login = $_SESSION['login']; http://www.php.net/echo '<pre>'; http://www.php.net/var_export( $login ); http://www.php.net/echo '</pre>'; ?>
HeHe nie no o session_start(); to pamietalem;)
Juz wszystko dziala poprawnie.
Ale mam takie pytanie: powiedzmy loguje sie uzytkownik na strone z jednego kompa i dostaje unikalny ID sesji. Mam przez to rozumiec, ze jesli z jakiegos innego kompa na strone zaloguje sie inny uzytkownik to on takze dostanie unikalny ID sesji [inny od tego powyzej] i oboje beda mogli przegladac zawartosc strony, tak?
Innymi slowy: wszystko oparte jest o ten identyfikator sesyjny?
Dzieki, poczytam
A mam jeszcze jedno pytanie:
czy jest sens przesylac w adresie URL np. identyfikator sesji, czy moze wystarczy w samym kodzie strony pobierac zmienna sesyjna?
Pytam, bo na wielu stronach zauwazylem, ze w URL jest wyswietlany ID sesji...
Dzieki
Ja zrobilem u siebie logowanie tak:
jesli uzytkownik podal login, ktory znajduje sie zapisany w bazie danych, oraz haslo pasujace do loginu [takze zapisane w bazie danych], to tworze zmienna $_SESSION[ok]=$login; , gdzie $login to nazwa uzytkownika.
Nastepnie na kazdej stronie mam linijke session_start(); i sprawdzam if($_SESSION[ok]). Jesli warunek zwraca true to wyswietlam zabezpieczona tresc strony, w przeciwnym wypadku wyswietlam "jawna" czesc strony. Czy takie zabezpieczenie jest wystarczajace, czy moze jest do bani?
Sorki że odkopuje, ale nie ma sensu pisać nowego tematu bo dostałbym link do tego, czy ktoś może podać wszystkie pliki jak mają wyglądać i rejestracja łącze z plikiem *sql ?
Witam,
tym razem ja odkopię Jestem (php przedszkolakiem) w trakcie pisania systemu logowania www(php)->mysql. Podpieram się gotowcem http://phpsense.com/php/php-login-script.html.
Zastanawia mnie jedna sprawa.
1) logowanie (u mnie) odbywa się na zasadzie sprawdzenia czy w tabeli 'uzytkownicy' danej bazy jest użytkownik wraz z hasłem podanym na stronie logowania
2) sprawdzenie to odbywa się dzięki połączeniu z bazą przy pomocy loginu i hasła wpisanego w "includowanym" ../../incledes/configu.php
3) po poprawnej weryfikacji z punktu 1 przypisujemy zmienne sesyjne itd
Pytania do powyższego:
1) Czy to oznacza, że mimo iż przypiszemy login (podany w formularzu logowania i znaleziony w tabeli użytkowników) to i tak fizycznie działamy na koncie o którym mowa w pkt. 2?
(ja tak właśnie to rozumiem)
2) Jeśli tak to czy takie rozwiązanie jest bezpieczne? - chodzi mi tu konkretnie o kwestię tego, że wszyscy tak naprawdę działają na jednym koncie fizycznie utworzonym na serwerze mysql, a ich "konta" z tabeli użytkownicy danej bazy są fikcyjnymi z punktu widzenia tegoż serwera.
3) Jeśli tak (pyt nr1) to czy tak to powinno profesjonalnie wyglądać i taka jest praktyka (jeden user + role dla kont tabeli uzytkownicy) czy też każdy użytkownik powinien mieć swoje faktyczne konto na serwerze mysql i poprzez jakiś panel administracyjny powinno się nadawać mu prawa do poszczególnych baz/tabel/kolumn itd.
Proszę mnie poprawić jeśli się myle, ale w/g mnie to chyba lepsze rozwiązanie z jednym użytkownikiem. Sam generuję mu bardzo mocne hasło, nadaję najpotrzebniejsze prawa i nie martwię się tym, że jakiś user z trochę wyższymi uprawnieniami ustawił sobie hasło 'mama' do konta które jest fizycznie utworzonym na serwerze.
Chyba, że moje założenie o niedostępności includowanego pliku jest błędne
pozdrawiam i dziękuję za odpowiedź
Dex19
Na pytanie 1 już chyba już sobie sam odpowiedziałem ?
łącząc się z bazą za pomocą
Na większości (jak nie wszystkich) hostingach współdzielonych nie możesz tworzyć nowych użytkowników w MySQL, więc stosuje się opcję 3. Potem strona się rozrasta, przechodzi na VPS albo dedyk, ale założenia zostają po staremu.
Opcja druga byłaby pewnie strasznie upierdliwa w zarządzaniu.
Opcja trzecia pierwsza jest ok jeśli masz możliwość jej zastosowania. Utworzenie osobnego użytkownika MySQL dla administratorów strony, osobnego dla operacji na newralgicznych danych (login, hasło, email, itp.) i osobnego dla całej reszty zapytań spowoduje, że nawet jeśli ktoś znajdzie lukę w twoim kodzie "wyświetlania 5 najnowszych komentarzy z bazy", to i tak do niczego ciekawego się nie dokopie.
EDIT
@Dex19 Tak, chodziło mi o opcję pierwszą. Jakoś tak wyszło, że opisuję te opcje od tyłu i się zamotałem.
bardzo dziękuję za odpowiedź
<?php http://www.php.net/define('login', 'robert'); http://www.php.net/define('haslo', '123456'); // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;) // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste. if ( ! http://www.php.net/empty( $_POST['login'] ) && ! http://www.php.net/empty( $_POST['password'] ) ) { // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla if ( $_POST['login'] == login && $_POST['password'] == haslo ) { // tworzymy zmienna sesyjna http://www.php.net/session_start(); $_SESSION['zalogowany'] = '1'; //session_register('zalogowany'); http://www.php.net/print("Zalogowany"); http://www.php.net/print("<a href="plik.php">Klik</a>"); } else { http://www.php.net/echo 'Podales zly login badz haslo!'; } } else { http://www.php.net/echo 'Wprowadz dane do formularza :)'; } ?>
<?php http://www.php.net/session_start(); //session_register('zalogowany'); if ( http://www.php.net/isset( $_SESSION['zalogowany'] ) ) { http://www.php.net/echo 'Wiadomosc dla zalogowanego uzytkownika'; http://www.php.net/print("<a href="wyloguj.php">Klik</a>"); } else { http://www.php.net/echo 'zaloguj się'; } ?>
<?php http://www.php.net/session_start(); http://www.php.net/session_destroy(); http://www.php.net/print("wylogowano"); ?>
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)