Szymon Opublikowano 4 Maja 2005 Zgłoś Opublikowano 4 Maja 2005 (edytowane) Potrzebuje zrobic "system" logowania uzytkownikow z uzyciem bazy mysql. Generalnie mam wyborazenie jak to ma wygladac ale nie o tym chcialem.... :-) Pierwszy problem na jaki napotkalem :> to czy kto moglby mi podsunac jakis pomysl, jak rozwiazac problem sesji , kazdeo z uzytkownikow. To znaczy cos co jest na forach, ze przykladowo prywatne wiadomosci mozna obejzec tlyko po zalogowaniu, a bez tego nie. JEzeli dobrze rozumuje :) to ma to zwiazek z cookies`ami, szukalem w knigach ktorymi dysponuje, ale nie moge znalezc konkretnie tego o co mi chodzi :-(. Mam nadzieje ze wyrazilem sie mniej wiecej jasno , o co mi chodzi :-). Bede wdzieczny za kazdą pomoc. edit: z tego co wyczytalem ma to zwiazek z SESJAMI :) ale co i jak;( Edytowane 4 Maja 2005 przez Szymon Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 4 Maja 2005 Zgłoś Opublikowano 4 Maja 2005 skoro wiarze sie z php i sesjami to trza bylo zaczac od maluala do php - jest genialny: http://pl2.php.net/session w srocie robisz sobie w pliku sekcje (ifami) do ktorych ma sie dostep dopiero jak jest ustawiona zmienna sesyjna. np: if ($_SESSION['zalogowany'] != 1){ print "blad"; //i np autoredirect;}else{ cialo wlasciwe i np switch rozdzialajacy na akcje;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
rojmarek Opublikowano 6 Maja 2005 Zgłoś Opublikowano 6 Maja 2005 (edytowane) ja od cookiesów proponowałbym odchodzic... IE6 ma domyślnie zablokowane cookiesy i malo kto sam sobie je włącza... trzeba szukac innych metod, np. nie zrywać połączenia z bazą mysql? Edytowane 6 Maja 2005 przez rojmarek Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
SGJ Opublikowano 6 Maja 2005 Zgłoś Opublikowano 6 Maja 2005 A kto dzisiaj jeszcze z IE korzysta? :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mr__y Opublikowano 6 Maja 2005 Zgłoś Opublikowano 6 Maja 2005 (edytowane) Tylko niech któryś z panów raczy zauważyć, że domyślnie SESJE pracują w oparciu o COOKIES. Więc ciasteczek nikt nie uniknie :) Natomiast generalnie bezpieczny system wygląda mniej więcej tak: 1.Jest jakiś formularz logowania, powiedzmy w pliku login.php. W formularzu użytkownik wpisuje swój login i hasło. Skrypt sprawdza (np. w bazie danych) czy te dane są poprawne. Jeżeli nie, to wyświetla komunikat, że ACCESS DENIED :) Natomiast jeśli wszystko jest OK, ustawia w sesji 3 zmienne: <?php....//login i password sa oksession_start();$_SESSION['_login'] = $login;$_SESSION['_password'] = $password; //tutaj warto pomyśleć o szyfrowaniu/hashowaniu haseł, np md5()$_SESSION['_lastAction'] = time();header('Location: index.php'); //przekierowanie po zalogowaniu?> 2.Na każdej podstronie wymagającej logowania sprawdzasz czy user jest zalogowany: <?php$limit = 1800; //limit 1800 sekund czyli 30 minutsession_start();//sprawdzamy czy w ogóle zmienne są ustawione:if(isset($_SESSION['_login']) && isset($_SESSION['_password']) && isset($_SESSION['_lastAction'])) { if( (time()-$_SESSION['_lastAction']) >$limit) { //limit czasu przekroczony! } $_SESSION['_lastAction'] = time(); //aktualizujemy licznik czasu // teraz sprawdzasz w bazie danych czy $_SESSION['_password'] // i $_SESSION['_login'] są poprawne (robisz to samo co w login.php) //jeżeli wszystko jest ok, DOPIERO TERAZ masz pewność, że user jest //zalogowany}else { //user nie zalogowany, wyświetlić komunikat czy coś :)}?> 3.Wylogowanie - najprostsza sprawa :) Musisz po prostu usunąć dane z sesji: <?phpsession_start();unset($_SESSION['_login']); //usuwamy daneunset($_SESSION['_password']);unset($_SESSION['_lastAction']);header('Location: index.php'); //Przekierowanie?> Generalnie na tej zasadzie opiera się mechanizm autoryzacji większości skryptów, w tym w skryptach typu phpBB czy InvisionPowerBoard :) Bardzo złym nawykiem jest ustawianie czegoś w rodzaju $_SESSION['zalogowany']. O ile w sesjach jeszcze jakoś to przejdzie, o tyle gdybyś to robił na ciastkach to już w ogóle katastrofa :) Natomiast żeby uprościć kod sprawdzania czy user jest zalogowany, możesz wpisać ten kod JEDEN RAZ do jakiegoś osobnego pliku w formie funckji, która zwraca true gdy logowanie poprawne lub false gdy użytkownik nie jest zalogowany. Wtedy sprawdzanie wyglądałoby tak: <?phprequire('auth.php'); //tu trzymamy skrypt autoryzacjiif( zalogowany() ) { // WSZYSTKO OK.}else { //ACCESS DENIED :)}?> Edytowane 6 Maja 2005 przez mr__y Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 6 Maja 2005 Zgłoś Opublikowano 6 Maja 2005 Tylko niech któryś z panów raczy zauważyć, że domyślnie SESJE pracują w oparciu o COOKIES. Więc ciasteczek nikt nie uniknie :)Jak to nie? Opcja session.use_only_cookies domyslnie jest wylaczona, zatem jak klient ma ciacha wylaczone to SID sie przekaze przez URL'a i problemu nie ma. Natomiast generalnie bezpieczny system wygląda mniej więcej tak: 1.Jest jakiś formularz logowania, powiedzmy w pliku login.php. W formularzu użytkownik wpisuje swój login i hasło. Skrypt sprawdza (np. w bazie danych) czy te dane są poprawne. Jeżeli nie, to wyświetla komunikat, że ACCESS DENIED :) Natomiast jeśli wszystko jest OK, ustawia w sesji 3 zmienne: [...] Ja bym do tego jeszcze dorzucil IP do sesji zaraz po zalogowaniu (i sprawdzanie tego potem na kazdej stronie, na ktorej trzeba byc zalogowanym). Znacznie utrudnia to mozliwosc przejecia sesji, poniewaz zaweza ludzi, ktorzy moga ja przejac do tych z tego samego IP, a wiec dotyczy tylko sieci za NAT'em. Mozna sie pokusic nawet o hash wiekszej ilosci danych (IP, przegladarka etc.), wtedy moznaby jeszcze zawezyc grono ludzi mogacych przejac sesje. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
mr__y Opublikowano 7 Maja 2005 Zgłoś Opublikowano 7 Maja 2005 Jak to nie? Opcja session.use_only_cookies domyslnie jest wylaczona, zatem jak klient ma ciacha wylaczone to SID sie przekaze przez URL'a i problemu nie ma. O ile SID w linkach zostanie dorzucony automatycznie, o tyle we wszystkich redirectach trzeba go dodawać ręcznie. Czyli ogólnie nieco zabawy, zwłaszcza jeżeli skrypt jest dość duży. Natomiast dodawanie dodatkowych informacji (IP, przeglądarka etc) jest dobrym pomysłem i można stopniowo rozbudować mechanizm logowania o takie elementy. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Szymon Opublikowano 7 Maja 2005 Zgłoś Opublikowano 7 Maja 2005 yghh :) duzo informacji :P postaram sie to ogarnac i jak bedize to mialo mniej wiecej ,rece i nogi to sie pochwale. Dzieki wszystkim. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 7 Maja 2005 Zgłoś Opublikowano 7 Maja 2005 O ile SID w linkach zostanie dorzucony automatycznie, o tyle we wszystkich redirectach trzeba go dodawać ręcznie. Czyli ogólnie nieco zabawy, zwłaszcza jeżeli skrypt jest dość duży.No tak.. ale napisales, ze sie ciastek nie ominie, wiec musialem interweniowac :) Pozatym redirecty to nie problem.. tak samo jak podales propozycje zamkniecia sprawdzania logowania w funkcje, tak samo mozna przeciez zrobic sobie funkcje wrapujaca redirecta, ktora sama sie zajmie dodaniem SID'a do linka, takze problem znowu znika ;] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 7 Maja 2005 Zgłoś Opublikowano 7 Maja 2005 yghh :) 1431486[/snapback] :mur: Ogólnie każdy sposób na system logowania/rejestracji ma swoje minusy i plusy, czy to cookie czy sesje-cookisowate czy czyste sesje, nic nie jest doskonałe dla każdego powinno to stanowić indywidualny wybór czego użyć. Strach przed przejęciem sesji, włamem hackiem i jeogo jako takie "wykonanie", przypomina amerykańskie filmy o hakcerach, czyli coś co dzieje sie na filmie a jest prawie nie do wykonania w rzeczywistości... Rób tak żeby było proste i sprawnie działało, na samym końcu... czyli potem zajmij sie tego udoskonalaniem. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
rojmarek Opublikowano 7 Maja 2005 Zgłoś Opublikowano 7 Maja 2005 no, ja ostatnio po zalogowaniu nie zrywam połączenia z bazą mysql i na tej podstawie sobie zapisuje ze ktos jest zalogowany, albo nie... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Szymon Opublikowano 12 Maja 2005 Zgłoś Opublikowano 12 Maja 2005 dobra :) te czesc juz mam http://szymon.sytes.net/dyplom/index.php login: test pass: test To jest uzytkownik bez prawa admina. Po nadaniu prawa admina pojawia sie jeszce dodatkowo opcja rejestrowania nowych userow po zalogowaniu :). Teraz mma inny problem :>. Wlasciwie prosilbym was tylko o propozycje rozwaizania. Chodzi o to ze Ci uzytkownicy to maja byc uczniowie, kazdemu z nich musze przyporządkowac w bazie oceny z roznych przedmiotów oraz plan zajec w zaleznosci od tego w jakiej jest klasie, czy na jakim kierunku (to juz jest wyszczegolnione przy nazwie usera w bazie jako numer 1 - technik informatyk 2 - co innego 3 co innego itd...). Stworzylem 3 tabele CREATE TABLE uczen( id VARCHAR(100) NOT NULL PRIMARY KEY, id_uczen VARCHAR(20) NOT NULL, login VARCHAR(20) NOT NULL, haslo VARCHAR(32) NOT NULL, imie VARCHAR(40) NOT NULL, nazwisko VARCHAR(40) NOT NULL, email VARCHAR(100) NOT NULL, kierunek TINYINT NOT NULL, data DATETIME NOT NULL, administrator TINYINT NOT NULL)");CREATE TABLE oceny( id VARCHAR(100) NOT NULL PRIMARY KEY, id_uczen VARCHAR(20) NOT NULL, id_przedmiot VARCHAR(30) NOT NULL, ocena TINYINT NOT NULL)");CREATE TABLE przedmioty( id VARCHAR(100) NOT NULL PRIMARY KEY, dzien VARCHAR(15) NOT NULL, godz_od VARCHAR(10) NOT NULL, godz_do VARCHAR(10) NOT NULL, przedmiot VARCHAR(20) NOT NULL, kierunek VARCHAR(10) NOT NULL)"); Ktos ma pomysl jak to powiazac? :D :) Niestety mialem malo stycznosci z bazami i nadal jeszcze nie do konca rozumiem ich dzialanie.... mam nadzieje ze po podpowiedziach zrozumiem cos wiecej :D ...dzieki z gory. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 12 Maja 2005 Zgłoś Opublikowano 12 Maja 2005 No klucze obce w php raczej kuleją , więc do powiązania tego raczej wykorzystaj php , ale takie porównywanie będzie średnio złożone w tym przypadku. Ale rozwiązanie tutaj sie samo nasuwa , popatrz na nazwy w tabeli oceny takie jak : id_uczen id_przedmiot ma ona dwie flagi id ucznia i id przedmiotu. Czyli dodawanie ocen uczniowi będzie polegało na dodaniu rekordu do tej tabeli albo jego modyfikacji gdzie trzeba będzie okręślić flagi jaki to uczeń i z jakiego przedmiotu jest ocena. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...