Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Skrypt rejestracji bez sesji ?
Forum PHP.pl > Forum > Przedszkole
flaq1991
Witam istnieje gdzieś w necie normalny skrypt który rejestracji loginu i profilu bez tych sesji ? z tymi sesjami same problemy mam np. ten skrypt z pierwszy od góry jak szukałem w google ... logując sie i wchodząc w profil w pasku adresu jest id uzytkownika jak wpisuje 1 jest uzytkownik nr 1 i tak dalej to jest podatność 100% ... sad.gif proszę o pomoc
Szymciosek
To w końcu rejestracja czy logowanie ?
flaq1991
Skrypt rejestracji moge miec obojętnie jaki .. tylko chodzi tutaj o poprawne logowanie i wyswietlenie profilu (Zabezpieczone) najlepiej bez tych sesji tongue.gif
Szymciosek
  1. <?php
  2.  
  3. require_once 'connect.php';
  4.  
  5.  
  6. class Login
  7. {
  8. private $username;
  9. private $password;
  10. private $connect;
  11.  
  12. public function __construct()
  13. {
  14. $userExist = false;
  15. $this->username = $_POST['username'];
  16. $this->password = $_POST['password'];
  17.  
  18. $this->connect = new Connect;
  19.  
  20. if (!empty($_POST['username']) && !empty($_POST['password']))
  21. {
  22. $usersArray = $this->connect->selectQuery("SELECT username, password FROM users");
  23.  
  24. foreach ($usersArray as $user)
  25. {
  26. if (in_array($this->username, $user) && in_array($this->password, $user))
  27. {
  28. $userExist = true;
  29. }
  30. }
  31. }
  32.  
  33. if ($userExist)
  34. {
  35. echo 'Zalogowano poprawnie<br />
  36. Za chwile nastapi przekierowanie...';
  37.  
  38. $this->login();
  39. }
  40. else
  41. {
  42. echo 'Zly login lub haslo<br />
  43. Za chwile nastapi przekierowanie...';
  44. }
  45.  
  46. $this->redirect();
  47. }
  48.  
  49. private function login()
  50. {
  51. //ustawienia sesji
  52. $_SESSION['logged'] = true;
  53. }
  54.  
  55. private function redirect()
  56. {
  57. echo '<script type="text/JavaScript">
  58. setTimeout("location.href = \'index.php\';",1500);
  59. </script>';
  60. }
  61. }
  62.  
  63. $login = new Login;


Wywołanie z formularza, który przekazuje username i password.

Przyda Ci się jeszcze klasa Connect.

  1. <?php
  2.  
  3. class Connect
  4. {
  5. private static $PDOInstance;
  6.  
  7. public function __construct()
  8. {
  9. if(!self::$PDOInstance) {
  10. try
  11. {
  12. self::$PDOInstance = new PDO('mysql:host=localhost; dbname=_dbname_', '_username_', '_password_');
  13. self::$PDOInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14.  
  15. }
  16. catch (PDOException $e)
  17. {
  18. die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
  19. }
  20. }
  21. return self::$PDOInstance;
  22. }
  23.  
  24. private function __clone() {}
  25.  
  26. public function selectQuery($query)
  27. {
  28. return self::$PDOInstance->query($query)->fetchAll(PDO::FETCH_ASSOC);
  29. }
  30.  
  31. public function insertQuery($query)
  32. {
  33. return self::$PDOInstance->exec($query);
  34. }
  35. }


Przy okazji prosiłbym kogoś o ocenę tego tworu.

Jednak spróbuj na sesjach, bo jakieś dane muszą zostać zapisane w pamięci komputera klienta.
flaq1991
Wkleiłem ten pierwszy skrypt na moją podstrone i znikły mi newsy na każdej podstronie haha biggrin.gif co jest z tym ?
Ulysess
dobrze rozumiem że klasa login wykonuje zapytanie pobierajace wszystkie rekordy z tabeli users questionmark.gif :|
wydaje mi się ze powinieneś zrobić zapytanie które sprawdza czy jest użytkownik o danym loginie oraz haśle i na podstawie tego wykonać odpowiednią akcje
Szymciosek
Owszem można, ale czy wtedy to nie jest mniej bezpieczne ? Bo jednak coś przekazane bezpośrednio do SQL może mi to popsuć chyba ?
Dodatkowo i tak muszę się zagłębić w tematy PDO i MYSQL
flaq1991
A nie ma nigdzie w necie gotowego skryptu bez sesji ? nie wiem czy mnie do konca zrozumieliscie ale podam jeszcze raz o co mi lata zrobiłem sobie ten skrypt u mnie na stronie : http://www.forumweb.pl/gotowe-komponenty-w...ia-profil,65408 Wszystko działało lecz wchodząc na profil w pasku adresu pokazywało się id=1 czyli uzytkonik numer 1 jezeli wklepałem tam id=2 wyswietlił mi się profil uzytkonika numer dwa a mi chodzi o takie cos ze kazdy użytkownik ma swój profil na którym są wyswietlone jakies dane i nikt inny nie moze ich zobaczyć .. sad.gif istnieje coś takiego ?
Ulysess
nie znam się na PDO więc się nie wypowiadam na temat filtracji danych..

jedyny pomysł jaki sensowny przychodzi mi do głowy bez obsługi sesji to trzymanie w zmiennej GET unikalnego hasha.

przy rejestracji w polu "hash" tworzony by był unikalny ciag znaków który był by przyporządkowany danemu userowi
gdy się logujesz i login oraz hasło się zgadza pobierany z bazy jest hash dla Twojego konta i jest umieszczany w linku np w postaci www.twojadres.pl/index.php?page=profil&hash=4rddfasdfasdf

przechodząc po każdej podstronie cały czas w linku jest zmienna hash i na każdej podsronie sprawdzasz czy w ogóle taki hash istnieje , jeżeli tak to zawartość strony się wyświetla jeżeli nie to drukuje błąd.

oczywiście coś takiego nie jest bezpieczne dlatego do logowania stosuje się sesje wink.gif
flaq1991
Dobra już mam rejestracje i logowanie takie jak potrzebowałem i teraz mam zakładkę 'panel' i uzytkownik wchodząc tam widzi dane z tabeli 'dane' gdzie userid = jego nazwie konta ... Niby proste ale jestem za bardzo początkujący pomoże ktoś ?^^
Damonsson
Połóż się spać i rano przejrzyj jeszcze raz ten skrypt gotowiec, bo w ogóle nie myślisz...

Skoro plik profile.php wyświetla dane dla usera pobrane z GET, to logiczne, że wyświetli każde dane które mu podasz w GET.

Jeśli chcesz pokazywać profil tylko właścicielowi profilu, musisz sprawdzać czy profil należy do właściciela, czyli coś w stylu:

plik profile.php:
  1. // Zapisz dane użytkownika o podanym ID, do zmiennej $profile
  2. $profile = user::getDataById ($id);
  3.  
  4. echo '<h1>Profil użytkownika '.$profile['login'].'</h1>';
  5.  
  6. echo '<b>Nick:</b> '.$profile['login'].'<br />';
  7. echo '<b>Email:</b> '.$profile['email'].'<br />';
  8. if($id == $_SESSION['TwojeId'])
  9. echo 'Ooo to jest Twój profil';
flaq1991
Wiem już pisze jak jakiś głąb ... sam nie wiem co pisze troche zamulam ale juz dochodze do celu mój skrypt 'Panelu' wygląda tak :

  1. <?php
  2. include 'config.php';
  3. db_connect();
  4. check_login();
  5. $user_data = get_user_data();
  6. echo 'Zalogowany jako : <font color="red"><b>'.$user_data['user_name'].'</font color></b>
  7. <a href="logout.php">Wyloguj się</a>';
  8. db_close();
  9. ?>


I teraz wystarczy zapytanie do bazy nie ? tylko nie wiem dokładnie jak to napisać ale powinno działać to +/- tak : Select cos,cos1,cos2 from konta where id=$user_data < chodzi ze ma wyciągnąc dane cos,cos1,cos2 z tabeli users gdzie userid równa się nazwie zalogowanego uzytkownika ... skrypt łączący sie baza mam potrzebne mi tylko to pytanie biggrin.gif
Damonsson
No i dobrze napisałeś zapytanie, tylko upewnij się (daj sobie: echo $user_data;) czy $user_data jest na pewno tym czego oczekujesz. Czyli id usera z tego co widze.
Jeżeli jest tablicą (array). To musisz wyświetlić jako: print_r ($user_data); . Wtedy będziesz miał wszystkie klucze i wartości tablicy, które wyświetlasz tak jak masz wyżej $user_data(tablica)['user_name(klucz tablicy)']. Czy to jest na pewno to czego oczekujesz? Sprawdź echo $user_data['id(czy jakoś inaczej, zależnie jak jest nazwany ten klucz wyświetlający id usera)']
flaq1991
Dobra to już mam ogarnięte ale pojawił sie nastepny problem przy testowaniu otóż gdy wyczysciłem ciasteczka swojej przeglądarki, zalogowałem się zalogowało mnie i chciałem przejsc na stronę dla zalogowanych lecz gdy tam wszedłem to wyskoczyło ze nie jestem zalogowany ;o dlaczego tak sie dzieje
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.