Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie i Sesje
Forum PHP.pl > Forum > Przedszkole
set4812
Mam skrypt logowania napisany który działa poprawnie. Przypisuje w sesji id do id uzytkownika z bazy. W związku z tym mam kilka pytan , czy istnieje jakas mozliwosć żeby ktoś sobie wpisał session['id']=1 i sie zalogował pod uzytkownikiem nr 1 w bazie oraz czy istnieje mozliwosc wyciagniecia specyficznego ciagu znaków z sesji i wciagniecia do bazy i porównania z sesjami u uzytkownika??
Pozdrawiam set4812
kamillo121
No pewnie smile.gif
Zrób sobie tabelę w bazie danych np "sesje' tam będziesz przechowywał nr id sesji id usera itd i porównywał z danymi ze sesji.
Wtedy masz już większą pewność, że nikt nie podmieni sesji

A co do tego ciągu, to możesz np md5 albo sha1 zmielić IP usera przeglądarkę i aktualny czas i to by był taki hash, potem zapisujesz go w tabeli sesje w mysql i u usera w session i porównujesz smile.gif
dethim
pokaz skrypt to zobaczymy
set4812
  1. <?php
  2. function logowanie(){
  3. if(!isset ($_POST['logowanie'])){
  4. echo '<center><form action="index.php" method="post">
  5. <font color="red"><B> Login</B></font><input type="text" name="user" size="15"><br/>
  6. <B><font color="red">Hasło</font></B><input type="password" name="pass" size="15"><br/>
  7. <input type="submit" value="Zaloguj" name="logowanie" ></form></center>
  8. <a href="index.php?id=register">REJESTRACJA</a>
  9. ';}
  10. else {
  11. $pass=$_POST['pass'];
  12. $login=$_POST['user'];
  13.  
  14. if(isset ($_POST['logowanie']))
  15. {
  16. $link = mysql_connect('localhost', 'root', '');
  17. $result = mysql_select_db('forum');
  18. $query= 'SELECT * FROM uzytkownicy';
  19. $z=mysql_query($query);
  20. while ($row=mysql_fetch_assoc($z))
  21. {
  22. if ($login==$row['login'] and $pass==$row['haslo']){
  23. $_SESSION['id'] = $row['id'];
  24. echo '<html><head><meta http-equiv="refresh" content="0;url=http://localhost/raporty/index.php"/></head><body></body></html>';
  25.  
  26. }
  27. else{
  28. echo "zla nazwa lub haslo uzytkownika";
  29. echo '<html><head><meta http-equiv="refresh" content="3;url=http://localhost/raporty/index.php"/></head><body></body></html>';
  30. }}}}}
  31. function zalogowany(){
  32. $link = mysql_connect('localhost', 'root', '');
  33. $result = mysql_select_db('forum');
  34.  
  35. $query= 'SELECT * FROM uzytkownicy WHERE id='.$_SESSION['id'].'';
  36. $z=mysql_query($query);
  37. while ($row=mysql_fetch_assoc($z))
  38. echo 'Witaj <b>'.$row['login'].'</b><br/>';
  39. echo '<a href="index.php?id=katalogi">Katalogi</a><br/>';
  40. echo '<a href="index.php?id=news">Newsy</a>';
  41. }
  42.  
  43.  
  44. if(!isset($_SESSION['id']))
  45. {
  46. $_SESSION['id'] = 0;
  47. logowanie();
  48. }
  49. else if($_SESSION['id'] == 0) {logowanie();}
  50.  
  51. if($_SESSION['id'] > 0) {zalogowany();}
  52.  
  53. ?>


Kod do optymalizacji całkowitej tongue.gif. Bede go przerabiał na klasę. Co w nim mozna znienic zeby bardziej zabezpieczyćquestionmark.gif
bastard13
Sesji nikt ci nie nadpisze. Nie ma możliwości żebym napisał sobie skrypt, w którym stworzę zmienną $_SESSION['id']=1 i się zaloguję dzięki niemu na twoją stronę. Sesja jest indywidualna dla każdego jej wywołania. Czyli dla każdej osoby jest ona osobna, niewspółdzielona i żaden użytkownik nie ma ingerencji w sesje innego użytkownika.
W tym kodzie, co pokazałeś, to na początek zmień logowanie. Nie wyciągaj wszystkich użytkowników i wtedy sprawdzaj czy istnieje taki, jaki się chce zalogować, tylko stwórz zapytanie w stylu:
  1. SELECT * FROM uzytkownicy WHERE login=$login AND haslo=$haslo

oczywiście takie dane trzeba sprawdzić. Do hasła polecam hashowanie np sha1, wtedy masz
  1. SELECT * FROM uzytkownicy WHERE login=$login AND haslo=sha1($haslo)

i oczywiście jakaś walidacja loginu, albo wyrażenie regularne, gdzie sprawdzasz, czy login zawiera tylko znaki dopuszczalne albo przynajmniej http://pl2.php.net/manual/en/function.mysq...cape-string.php
Po wykonaniu zapytania sprawdzaj czy został wyciągnięty rekord z bazy. Jeżeli tak -> zaloguj, nie -> brak użytkownika.
set4812
przechodze 100 na obiektowo i w stosunku do tego jeszcze zadam kilka pytan czy da sie przerwać wykonywanie klasy gdy wszystkie funkcje wykonywuja sie w konstruktorze?? A co do haseł w md5 będę kodował. login i hasło escepe string przeleciec. łaczenie z baza chce oddzielenie zrobic jak je uzywac w klasie jezeli mam je w oddzielnym pliku, uzywam mysqli.
bastard13
1) Przerywanie wykonywania funkcji - return bądź exit()
2) Jeżeli używasz md5 lub czegoś podobnego to nie potrzeba ci już escape.
3) funkcje include(), require(), require_once() - dołączanie pliku. Żeby je używać w klasie możesz przekazać jako argument do konstruktora/funkcji klasy.
set4812
Ja chce miec w całej Clasie zeby funkcje miały połaczenie z baza jak i konstruktor, czyli mam zaincludowac czy jakos przekazac, prosze o jakis przykład
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.