![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 9.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam, pilnie potrzebuję pomocy. Robię vortal komputerowy, zrobiłem już cms'a brakuje tylko logowania i zabezpieczenia panelu administratora... Wpadłem na pomysł, żeby konta załozone na forum działały w serwisie, czyli logowanie ma korzystac z bazy forum.
problem jest nastepujący. Stworzywszy sesje efekt widoczny jest tylko na stronie index.php?id=pole... Zamieszcze fragmenty kodu. cms/rangi/login.php Ta podstrona jest includowana w polu przeznaczonym na logowanie, albo jeżeli jest juz ktoś zalogowany to do bajerów profilu... (admin.php, modek.php czy user.php) Kod <?php if (isset($_SESSION['admin']) && $_SESSION['admin']=='123') { include('cms/rangi/admin.php'); } else if (isset($_SESSION['user']) && $_SESSION['user']=='abc') { include('cms/rangi/user.php'); } else { ?> <table cellpadding="0" cellspacing="0" align="center"> <form name="login" method="POST" action="index.php?id=pole"> <tr><td><input type="text" class="log" name="login" value="login" onFocus="if(this.value=='login') {this.value='';}" onBlur="if(this.value=='') {this.value='login';}"></td><td rowspan="3" width="2"></td><td rowspan="3"><input type="image" SRC="_img/ikony//ok.png" ALT="OK"></td></tr> <tr><td height="6"></td></tr> <tr><td><input type="password" class="log" name="pass" value="haslo" onFocus="if(this.value=='haslo') {this.value='';}" onBlur="if(this.value=='') {this.value='haslo';}"></td></tr> <tr><td colspan="3" height="3"></td></tr> <tr><td colspan="3"><a href="#" class="srodek">Rejestracja w Portalu</a> <a href="#" class="srodek">Przypomnienie hasła</a></td></tr> </form> </table> <?php } ?> Jeszcze tylko mała uwaga, do tych sesji dodaje wartość abc lub 123 tylko przykładowo. Celem wstawiania tych wartości jest zabezpieczenie sie przed tworzeniem fake sesji, które dawałyby uprawnienia... cms/rangi/pole.php do tego odwoluje sie login.php tu sprawdzane sa wartosci login i haslo i tworzone sa sesje... Kod <?php session_start(); $link = mysql_connect('127.0.0.1','root','haslo); mysql_select_db('portal'); $user = $_POST['login']; $result = mysql_query("SELECT * FROM phpbb_users WHERE username = '$user'"); $pass = $_POST['pass']; $pass = md5($pass); $row = mysql_fetch_array($result); if($pass == $row['user_password']){ switch ($row['user_id']) { case 2: $_SESSION[$user] = '123'; break; case 3: $_SESSION[$user] = 'abc'; break; default: echo('zalogowany jako none'); break; } } mysql_close($link); ?> i chyba to wszystko. Problem tkwi w tym, że include np. admin.php jeżeli jestesmy zalogowani na admina działa tylko, gdy jestesmy na stronie index.php?id=pole (normalna strona główna z dodaną wartością cms/rangi/pole.php). Bawię się w PHP od września, więc nie wymagajcie odemnie za dużo... prosiłbym o radę, żebym wreszcie uporał się z tym problemem, dziekuję z góry! Ten post edytował Cysiaczek 9.11.2007, 23:06:08
Powód edycji: dodalem tag (cysiaczek)
|
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Hmm... czy przeczytanie regulaminu forum jeszcze się kwalifikuje pod niedużo? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Przenoszę na Przedszkole Pozdrawiam. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 9.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
problem rozwiązałem, ale częściowo (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
zawartość pole.php dałem do index.php a formularz login.php wyedytowałem na action="index.php" teraz działa, ale... Ale jest następujące. Jak zrobić, aby w sesji była nazwa uzytkownika i jakiś id, który byłby znany tylko systemowi i ewentualnie użytkownikowi... Myślalem nad: Kod switch ($row['user_id']) { case 2: $_SESSION[$user] = $pass; break; case 3: $_SESSION[$user] = $pass; break; } gdzie $user i $pass to dane pobrane z bazy danych po prawidlowym zalogowaniu. ale jak z kolei się odwoływać do tego np. na stronie głównej skoro są to tylko zmienne które biorą dane z $_POST :/ prosze o pomoc.. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 7 Dołączył: 24.01.2006 Skąd: lublin/wawa Ostrzeżenie: (0%) ![]() ![]() |
to moze ja tylko wspomne ze sesja ma swoj identyfikator, a skoro ma swoj identyfikator tzn. ze kazdy user ma swoja "wlasna" prywatna sesje (np. po poprawnym zalogowaniu)..tzn, ze w sesji nie musisz przechowywac danych na zasadzie takiej jak napisales:
bo sesja jednego usera nie moze byc czescią sesji innego usera :S wystarczy
a odwolanie do tego chyba juz jest dla ciebie zrozumiale? Ten post edytował dem 10.11.2007, 13:50:02 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 9.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
No ok, ale to nie rozwiązuje problemu. Jeżeli warunek, który sprawdza prawdziwość sesji wygląda tak:
Kod <?php if ($_SESSION['admin']=='costam') { include('cms/rangi/admin.php'); } else if ($_SESSION['user']=='costam') { include('cms/rangi/user.php'); } else { include('cms/rangi/login.php'); } ?> za costam wstawiłbym np. $login.'jakisciag'.$pass, gdzie jakisciag bylby tajny. Przy uzyciu exploda o jakisciag wyciagnolbym login i haslo, ktore mogloby sie przydac chocby przy komentarzach, w ktorych widnialby nick autora... Teraz jak do costam w tym sprawdzaniu autentycznosci wcisnac $login i $pass (wartosci) bo jak dam same zmienne bez $_POSTA to nic z tego nie wyjdzie, ma ktoś jakiś pomysł? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Proszę o pomoc!! |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 7 Dołączył: 24.01.2006 Skąd: lublin/wawa Ostrzeżenie: (0%) ![]() ![]() |
ale widze ze nie rozumiesz czym sa sesje i w jaki sposob sa one przechowywane...
to tablica w ktorej mozesz miec n wymiarow, czyli mozesz przechowywac sobie ile chcesz roznych wartosci, w roznych wymiarach bez potrzeby wykorzystywania explode...
jesli nie wierzysz to napisz sobie to co wyzej a potem pod psodem dodaj
i zobaczysz ze to jest bardzo ladna i wygodna tablica... ehh, proponuje Ci dowiedziec sie w manalu jakie sa mozliwosci sesji, a dopiero potem pisac na nich cokolwiek edit: a co do "tajnosci" tych danych, to zastanow sie najpierw w jaki sposob ktos moze przechwycic czyjas sesje i bron sie przed tym, bo odkodowywanie caly czas danych z bezpiecznej sesji przy malutkim projekcie sie jest nieoptymalne edit: ps. wymiar 'auth' nie jest potrzebny, od tak do grupowania odpowiednich wartosci, aby przy print_r wiadomo bylo co gdzie jest... Ten post edytował dem 11.11.2007, 12:17:18 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 26.09.2025 - 17:25 |