Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] System logowania i sesje
-gosc_mufan-
post
Post #1





Goście







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
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 33)
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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.

Ten post edytował Cysiaczek 21.07.2006, 11:09:01
Go to the top of the page
+Quote Post
adi2005
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 17.07.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jest masa ksiazek na ten temat. Mozna je już kupić za ok 30zeta
Go to the top of the page
+Quote Post
scanner
post
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




@adi2005: jeszcze jedna taka odpowiedz i zaliczysz warna

A do autoa: Czy COKOLWIEK próbowałeś już zrobić?
Go to the top of the page
+Quote Post
adi2005
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 17.07.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@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
Go to the top of the page
+Quote Post
-gosc_mufan-
post
Post #6





Goście







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.
Go to the top of the page
+Quote Post
acztery
post
Post #7





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
strife
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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:

  1. <form method="post" action="login.php">
  2. <input type="text" name="login" />
  3. <input type="password" name="password" />
  4. <input type="submit" value="zaloguj sie" />
  5. </form>

Oczywiście ten formularz umieszczamy w naszym pliku, bądź innym wzkazującym na login.php ( action ). Gdy już mamy w takiej postaci nasz plik, przystępujemy do obrobienia go. Tak więc tworzymy warunek, który nam sprawdzi czy dane przesłane w formularzu są prawidłowe.

  1. <?php
  2. // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;)
  3. // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste.
  4. if ( ! empty( $_POST['login'] ) && ! empty( $_POST['password'] ) )
  5. {
  6. // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla
  7. if ( $_POST['login'] == 'strife' && $_POST['password'] == 'admin' )
  8. {
  9. // tworzymy zmienna sesyjna
  10. $_SESSION['auth'] = '1';
  11. }
  12. else
  13. {
  14. echo 'Podales zly login badz haslo!';
  15. }
  16. }
  17. else
  18. {
  19. echo 'Wprowadz dane do formularza :)';
  20. }
  21. ?>

Przy tak skonstruowanym kodzie, i poprawnym wpisaniu danych zostanie dodane zmienna sesyjna o nazwie 'auth'. Zmienne sesyjne są widoczne w każdym miejscu ponieważ ich zasięg jest globalny i tutaj też zapraszam do zapoznania się z manual'em i rozdziałem o zmiennych predefiniowanych.

Następnie posiadając taką zmienną możemy w każdym miejscu sprawdzić, czy użytkownik jest zalogowany, czyli sprawdzamy czy ta zmienna istnieje.

  1. <?php
  2. if ( isset( $_SESSION['auth'] ) )
  3. {
  4. echo 'Wiadomosc dla zalogowanego uzytkownika';
  5. }
  6. ?>

Wszystko wydaje, się proste, ale kod który napisałem, może nie działać.. Dlaczego? W kodzie, który zaprezentowałem nie ma nigdzie zdefiniowanego startu sesji, więc tworzenie zmiennych sesyjnych i ich sprawdzanie nie ma najmniejszego sensu. Na początku kodu musi być:

  1. <?php
  2. ?>

Wtedy, możemy dowolnie operować na sesjach. Wszystko pięknie, ale czegoś tu brakuje... a co jeśli będziemy chcieli się wylogować, tutaj z pomocą przychodzi session_destroy" title="Zobacz w manualu PHP" target="_manual, bądź unset" title="Zobacz w manualu PHP" target="_manual, z tą różnicą, że to pierwsze usunie wszystkie zmienne sesyjne, a drugie tylko wybraną:

  1. <?php
  2. unset( $_SESSION['auth'] );
  3. ?>

To by było Tyle, jeżeli chodzi o samo logowanie, teraz trochę o mysql. Posłużę się do tego kodem, który już wcześniej napisałem na tym forum:

  1. <?php
  2. $query = mysql_query("SELECT * FROM uzytkownicy WHERE `user` = '" . $_POST['user'] . "' ");
  3. $fetch = mysql_fetch_array($query);
  4. if ( $fetch ) // jesli user zostanie znaleziony w bazie
  5. {
  6. if ( md5( $_POST['pass'] ) == $fetch['haslo'] ) // jesli haslo sie zgadza
  7. {
  8.  echo 'logowanie zakonczone sukcesem';
  9. }
  10. else
  11. {
  12.  echo 'Przykro mi, ale podane haslo jest bledne';
  13.  }
  14. }
  15. else
  16. {
  17.  echo 'Podany uzytkownik nie istnieje w bazie danych';
  18. }
  19.  
  20. ?>

Oczywiście do takiego kodu można się przyczepić o kwestię bezpieczeństwa ( sql injection ), ale żeby nie przyciemniać tego przykładu odwołuję Cię do przyczepionego tematu sql injection na forum -> php. A więc przeanalizujmy powyższy kod, użytkownik wpisuje swój login i hasło, następnie wykonujemy zapytanie, które sprawdza czy dany użytkownik istnieje, jeżeli tak sprawdzamy hasło, i miejscu gdzie pojawia się informacja o poprawnym zalogwaniu, możemy dodać naszą zmienną sesyjną.

Mam nadzieję, że już mniej więcej wiesz o co chodzi z logowaniem. Kod pisałem z palca, więc mogą być małe błędy. W razie pytań czy wątpliwości, pisz na forum. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam!
Go to the top of the page
+Quote Post
robos85
post
Post #9





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Zrobiłem takie pliki:
logowanie.html:
  1. <head>
  2. <title>Logowanie</title>
  3. </head>
  4. <body>
  5. <form method="post" action="sprawdz.php">
  6. Login: <input type="text" name="login" />
  7. Hasło: <input type="password" name="password" />
  8. <input type="submit" value="zaloguj sie" />
  9. </form>
  10. </body>
  11. </html>


sprawdz.php:
  1. <?php
  2.  
  3. define('login', 'robert');
  4. define('haslo', '123456');
  5.  
  6.  
  7. // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;)
  8. // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste.
  9. if ( ! empty( $_POST['login'] ) && ! empty( $_POST['password'] ) )
  10. {
  11. // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla
  12. if ( $_POST['login'] == login && $_POST['password'] == haslo )
  13. {
  14. // tworzymy zmienna sesyjna
  15. $_SESSION['zalogowany'] = '1';
  16. print("Zalogowany");
  17. }
  18. else
  19. {
  20. echo 'Podales zly login badz haslo!';
  21. }
  22. }
  23. else
  24. {
  25. echo 'Wprowadz dane do formularza :)';
  26. }
  27.  
  28.  
  29. ?>


plik.php
  1. <?php
  2.  
  3. if ( isset( $_SESSION['zalogowany'] ) )
  4. {
  5.  
  6. echo 'Wiadomosc dla zalogowanego uzytkownika';
  7. }
  8.  
  9. ?>


Wchodząc do pliku plik.php nic mi się nie wyświetla.
Może mi ktoś powiedzieć co tu nie tak zrobiłem?
Go to the top of the page
+Quote Post
kwiateusz
post
Post #10


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005




bezpośrednio do plik.php? to czego oczekujesz że zmienna w ifie z powietrza sie wyczaruje?
Go to the top of the page
+Quote Post
robos85
post
Post #11





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


ok działa oto moje pliki:
logowanie.html pomijam,

sprawdz.php
  1. <?php
  2.  
  3. define('login', 'robert');
  4. define('haslo', '123456');
  5.  
  6.  
  7. // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;)
  8. // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste.
  9. if ( ! empty( $_POST['login'] ) && ! empty( $_POST['password'] ) )
  10. {
  11. // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla
  12. if ( $_POST['login'] == login && $_POST['password'] == haslo )
  13. {
  14. // tworzymy zmienna sesyjna
  15. $_SESSION['zalogowany'] = '1';
  16. //session_register('zalogowany');
  17. print("Zalogowany");
  18. print("<a href="plik.php">Klik</a>");
  19. }
  20. else
  21. {
  22. echo 'Podales zly login badz haslo!';
  23. }
  24. }
  25. else
  26. {
  27. echo 'Wprowadz dane do formularza :)';
  28. }
  29.  
  30.  
  31. ?>


plik.php
  1. <?php
  2. //session_register('zalogowany');
  3. if ( isset( $_SESSION['zalogowany'] ) )
  4. {
  5.  
  6. echo 'Wiadomosc dla zalogowanego uzytkownika';
  7. print("<a href="wyloguj.php">Klik</a>");
  8. }
  9.  
  10. else
  11. {
  12. echo 'zaloguj się';
  13. }
  14. ?>


wyloguj.php
  1. <?php
  2.  
  3. print("wylogowano");
  4.  
  5. ?>


tylko teraz moje pytanie brzmi: jak przerobić plik sprawdz.php aby po udanym zalogowaniu przeiosło mnie do pliku index.html (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) wiem że trzeba dodać header(...) ale w którym miejscu ?
Go to the top of the page
+Quote Post
kwiateusz
post
Post #12


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005




np. zamiast
  1. <?php
  2. print("Zalogowany");
  3. print("<a href="plik.php">Klik</a>");
  4. ?>
Go to the top of the page
+Quote Post
robos85
post
Post #13





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kwiateusz
post
Post #14


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005




wystarczy manula przejrzeć...
session_id" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
robos85
post
Post #15





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


zrobiłem taki plik:

wybór.html
  1. <title>strona startowa</title>
  2. </head>
  3. <br>
  4. <?
  5. session_start();
  6.  
  7. if ( isset( $_SESSION['zalogowany'] ) )
  8. { ?>
  9. <font size="6" color="blak" face="times"><center><B>Wybierz zadanie:</center></font>
  10. <br>
  11. <center><table height="20%" width="20%" border="1">
  12. <tr><td align="center">
  13. <a href="obliczenia.html"> kalkulator</a></td></tr>
  14. <tr><td align="center">
  15. <a href="zapisz.html"> wysyłanie pliku </a></td></tr></table></center>
  16. </body>
  17. </html> <?
  18. }
  19. else
  20. {
  21. header("Location: wybor.html");
  22. }
  23. ?>


Chodzi mi o to, żeby był w .html i po wejściu w niego była sprawdzana sesja.
Lecz jak wchodzę zawsze się pokazuje menu. Pewnie plik jest powalony. Jak to przerobić na działający?
Do czego dążę: otóż jak sprawdzać sesję w plikach o rozsz: .html (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ten wybor.html to przykład, który nie wiem jak rozwiązać i liczę na waszą pomoc

Ten post edytował robos85 20.03.2007, 23:36:20
Go to the top of the page
+Quote Post
Cienki1980
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


Jeżeli chcesz korzystać z kodu PHP musisz umieszczać go w plikach *.php
Go to the top of the page
+Quote Post
robos85
post
Post #17





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


yhm ok będę to robił, bo myślałem że jakoś da radę w *.html zrobić.
Go to the top of the page
+Quote Post
kwiateusz
post
Post #18


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005




da o ile możesz używać plików htaccess (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) poszukaj na google co należałoby wpisać

bo ja akurat nie pamietam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
idas
post
Post #19





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 23.03.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Dzieki

Ten post edytował idas 26.03.2007, 00:33:32
Go to the top of the page
+Quote Post
strife
post
Post #20





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Cytat(idas @ 26.03.2007, 01:16:25 ) *
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. Ale jak w takim wypadku rozroznic np. uzytkownika Jas od uzytkownika Adam? Bo z tego co widze to w momencie pomyslnego logowania jest tworzona jedna i ta sama zmienna...


Możesz rozróżnić tych użytkowników poprzez nadanie im odpowiednich ról. Czyli w bazie danych tworzysz sobie dwie tabele, w pierwszej masz użytkowników, a w drugiej maski dostępu ( podział na role ). Powiedzmy, że tabela użytkowników zawiera następujące pola

Kod
id | name | password | mask
1     Jaś       md5hash    1
2    Adam    md5hash    2


Natomiast tabela z maskami, będzie wyglądała w ten sposób:

Kod
id | name | has_admin |
1      admin     1
2       user      0


To chyba najprostrzy przykład jaki może być. No i wtedy, w momencie zalogowania dodajesz kolejną zmienną, która będzie odpowiadała za dostęp do panelu administracyjnego. $_SESSION['admin']. W ten sposób możesz rozróżnić użytkowników i przydzielać im odpowiednie role. Poszukaj na forum na ten temat już trochę o tym pisaliśmy.

  1. <?php
  2. $query = mysql_query("SELECT * FROM uzytkownicy WHERE `user` = '" . $_POST['user'] . "' ");
  3. $fetch = mysql_fetch_array($query);
  4. if ( $fetch ) // jesli user zostanie znaleziony w bazie
  5. {
  6. if ( md5( $_POST['pass'] ) == $fetch['haslo'] ) // jesli haslo sie zgadza
  7. {
  8.  echo 'logowanie zakonczone sukcesem';
  9.  $_SESSION['login'] = '1';
  10.  // dodawanie ról w momencie poprawnego zalogowania
  11.  $query = mysql_fetch_array( mysql_query("SELECT * FROM maski_dostepu WHERE id = " . $fetch['mask'] . " ") );
  12.  $_SESSION['has_admin'] = $query['has_admin'];
  13.  /**
  14. * potem sprawdzac czy ktos ma gdzie dostep przykladowo czy Janek moze
  15. * wejsc na strone x sprawdzasz tak 
  16. * if ( ! empty( $_SESSION['has_admin'] ) )
  17. * { 
  18. * echo 'masz dostep';
  19. * }
  20. */
  21. }
  22. else
  23. {
  24.  echo 'Przykro mi, ale podane haslo jest bledne';
  25.  }
  26. }
  27. else
  28. {
  29.  echo 'Podany uzytkownik nie istnieje w bazie danych';
  30. }
  31. ?>


W prostrzy sposób możesz tych użytkowników rozróżnić, poprzez dodanie pola has_admin w tabeli z użytkownikami, ale takie rozwiązanie jest mało optymalne, bo musisz zmienić tą wartość wtedy u każdego użytkownika, a jak widzisz z podziałem na role zmieniasz to tylko w jednym rekordzie.

uff... mam nadzieję, że teraz już to rozumiesz. Idę spać.

~edit
Cytat
JAK TA ZMIENNA PRZEKAZYWAC NA KOLEJNE PODSTRONY DO KTORYCH BEDE MIAL ODNOSNIKI?


Nie rozumiem, przecież gdy na początku każdej tej strony będziesz podawał session_start to ta zmienna będzie widoczna, więc nie ma sensu loginu inaczej tego przekazywać. Najlepiej będzie jak sam sobie to sprawdzisz.

Pozdrawiam!
Go to the top of the page
+Quote Post
idas
post
Post #21





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 23.03.2007

Ostrzeżenie: (0%)
-----


Wlasnie sie przekonalem, ze zmienne sesyjne u mnie nie dzialaja:/
Zainstalowalem serwer Apache u siebie na kompie. Jak je wlaczyc?
Go to the top of the page
+Quote Post
strife
post
Post #22





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Cytat(idas @ 26.03.2007, 16:41:34 ) *
Wlasnie sie przekonalem, ze zmienne sesyjne u mnie nie dzialaja:/
Zainstalowalem serwer Apache u siebie na kompie. Jak je wlaczyc?


Nie działają czyli co dokładniej się dzieje? Jakiś błąd ? Przeczytaj mojego posta w tym temacie, jak tak zrobisz to powiedz czy nadal Ci zmienne sesyjne nie działają.

Pozdrawiam!
Go to the top of the page
+Quote Post
idas
post
Post #23





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 23.03.2007

Ostrzeżenie: (0%)
-----


Yo!
Jednak sesje dzialaja. Jednak mam pewne pytanie:
Jak przepisac zmienna z tablicy $_SESSION?
Bo np. mam zmienna
  1. <?php
  2. $_SESSION['login_ok'];
  3. ?>
i proba
  1. <?php
  2. $login = $_SESSION['login_ok'];
  3. ?>
nie przynosi pozytywnych rezultatow :/
Go to the top of the page
+Quote Post
strife
post
Post #24





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


A jakich rezultatów się spodziewasz, musi działać.

  1. <?php
  2. session_start(); // moze zapomniales?
  3. $_SESSION['login'] = 'dupa';
  4. $login = $_SESSION['login'];
  5. echo '<pre>';
  6. var_export( $login );
  7. echo '</pre>';
  8. ?>


Nie działa? Napisz coś więcej, bo:

Cytat
nie przynosi pozytywnych rezultatow :/


Naprawdę mało nam mówi. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pzdr.
Go to the top of the page
+Quote Post
idas
post
Post #25





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 23.03.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
strife
post
Post #26





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Cytat(idas @ 28.03.2007, 13:27:15 ) *
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?


Tak, a te zmienne sesyjne są przechowywane na serwerze w jakimś tam katalogu ( np. tmp/ ) i usuwane co jakiś czas ( żywotność sesji podana jest w php.ini ). Ale nic nie stoi na przeszkodzie abyś sobie sam napisał obsługę sesji i np. trzymaj zmienne sesyjne w bazie danych.

PHP.PL :: Session Handler

Pozdrawiam.
Go to the top of the page
+Quote Post
idas
post
Post #27





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 23.03.2007

Ostrzeżenie: (0%)
-----


Dzieki, poczytam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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...
Go to the top of the page
+Quote Post
strife
post
Post #28





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Cytat(idas @ 29.03.2007, 16:13:19 ) *
Dzieki, poczytam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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...


To zależy od ustawień użytkownika. Zauważ, że gdy wyłączysz ciasteczka to na tym forum będziesz miał identyfikator sesji przesyłany przez URL. Pytasz czy jest sens, zapewne jakiś jest, ale mało kto wyłącza ciasteczka ( patrz ranking.pl ).
Go to the top of the page
+Quote Post
idas
post
Post #29





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 23.03.2007

Ostrzeżenie: (0%)
-----


Dzieki (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
super_e107
post
Post #30





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 22.12.2006

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
Dex19
post
Post #31





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 26.01.2011

Ostrzeżenie: (0%)
-----


Witam,
tym razem ja odkopię (IMG:style_emoticons/default/winksmiley.jpg) 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 (IMG:style_emoticons/default/winksmiley.jpg)


pozdrawiam i dziękuję za odpowiedź
Dex19

Na pytanie 1 już chyba już sobie sam odpowiedziałem (IMG:style_emoticons/default/winksmiley.jpg) (IMG:style_emoticons/default/questionmark.gif) ?

łącząc się z bazą za pomocą
Kod
(mysql_connect($serwer, $login, $haslo) and mysql_select_db($baza));

wtedy przy użyciu zmiennych sesyjnych i mogę działać na loginie i haśle podanym przez usera (IMG:style_emoticons/default/winksmiley.jpg)

pozostając w temacie bezpieczeństwa - które z poniższych rozwiązań jest właściwe? (o ile wogóle któreś jest (IMG:style_emoticons/default/winksmiley.jpg) )

Opcja pierwsza:
1) aplikacja przewiduje 3 role
2) tworzę 3 userów, którym grantem nadaję w bazie prawa do odpowiedniech operacji na poszczegolnych tabelach/kolumnach itd
3) przy logowaniu do systemu sprawdzam role usera i do bazy już loguję go przy użyciu wcześniej utworzonego w pkt 2 konta-roli

Opcja druga:
1) Każdy user ma fizycznie utworzone konto na serwerze MySql
2) W tabeli uzytkownicy (bazy roboczej, nie serwera) przypisane są role i po stronie kodu, warunkami stworzony system dostępu na podstawie ról

Opcja trzecia:
1) Jedno konto za pomoca którego cały czas łączę się z bazą
2) W tabeli uzytkownicy (bazy roboczej, nie serwera) przypisane są role i po stronie kodu, warunkami stworzony system dostępu na podstawie ról

pozdrawiam

Go to the top of the page
+Quote Post
Noidea
post
Post #32





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Noidea 27.01.2011, 01:20:34
Go to the top of the page
+Quote Post
Dex19
post
Post #33





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 26.01.2011

Ostrzeżenie: (0%)
-----


bardzo dziękuję za odpowiedź

Cytat
Opcja trzecia 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..


zakładam że chodziło tu o opcję pierwsza (IMG:style_emoticons/default/smile.gif) ?
Go to the top of the page
+Quote Post
shaolin33
post
Post #34





Grupa: Zarejestrowani
Postów: 136
Pomógł: 0
Dołączył: 5.10.2012

Ostrzeżenie: (10%)
X----


Cytat(robos85 @ 20.03.2007, 22:30:44 ) *
ok działa oto moje pliki:
logowanie.html pomijam,

sprawdz.php
  1. <?php
  2.  
  3. define('login', 'robert');
  4. define('haslo', '123456');
  5.  
  6.  
  7. // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;)
  8. // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste.
  9. if ( ! empty( $_POST['login'] ) && ! empty( $_POST['password'] ) )
  10. {
  11. // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla
  12. if ( $_POST['login'] == login && $_POST['password'] == haslo )
  13. {
  14. // tworzymy zmienna sesyjna
  15. $_SESSION['zalogowany'] = '1';
  16. //session_register('zalogowany');
  17. print("Zalogowany");
  18. print("<a href="plik.php">Klik</a>");
  19. }
  20. else
  21. {
  22. echo 'Podales zly login badz haslo!';
  23. }
  24. }
  25. else
  26. {
  27. echo 'Wprowadz dane do formularza :)';
  28. }
  29.  
  30.  
  31. ?>


plik.php
  1. <?php
  2. //session_register('zalogowany');
  3. if ( isset( $_SESSION['zalogowany'] ) )
  4. {
  5.  
  6. echo 'Wiadomosc dla zalogowanego uzytkownika';
  7. print("<a href="wyloguj.php">Klik</a>");
  8. }
  9.  
  10. else
  11. {
  12. echo 'zaloguj się';
  13. }
  14. ?>


wyloguj.php
  1. <?php
  2.  
  3. print("wylogowano");
  4.  
  5. ?>


tylko teraz moje pytanie brzmi: jak przerobić plik sprawdz.php aby po udanym zalogowaniu przeiosło mnie do pliku index.html (IMG:style_emoticons/default/questionmark.gif) wiem że trzeba dodać header(...) ale w którym miejscu ?



witaj,

podeslesz poprawiony kod sprawdz.php (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 14:46