Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Dodanie $_SESSION do logowania
Forum PHP.pl > Forum > Przedszkole
saren_as
Mam cos takiego:
  1. <html>
  2. <head>
  3. <title>Login</title>
  4. </head>
  5.  
  6. <?php
  7. $hidden_hash_var='saren';
  8. // polaczenie z baza danych
  9. include('connect.php');
  10.  
  11. @$user_name = $_POST['user_name'];
  12. @$password = $_POST['password'];
  13.  
  14. // wywolanie funkcji logowania
  15. user_login($user_name,$password);
  16.  
  17. // funkcja sprawdzajaca poprawnosc logowania
  18. function user_login($user_name,$password) {
  19.    global $feedback;
  20.    if (!$user_name || !$password) {
  21.        $feedback .=  ' ERROR - Missing user name or password ';
  22.        return false;
  23.    } else {
  24.        $user_name=strtolower($user_name);
  25.        $password=strtolower($password);
  26.        $sql="SELECT * FROM user WHERE user_name='$user_name' AND password='". md5($password) ."'";
  27.        $result=mysql_query($sql);
  28.        if (!$result || mysql_numrows($result) < 1){
  29.            $feedback .=  ' ERROR - User not found or password incorrect ';
  30.            return false;
  31.        } else {
  32.            if (mysql_result($result,0,'is_confirmed') == '1') {                
  33.                user_set_tokens($user_name);
  34.                $feedback .=  ' SUCCESS - You Are Now Logged In ';
  35.                return true;
  36.            } else {
  37.                $feedback .=  ' ERROR - You haven't Confirmed Your Account Yet ';
  38.                return false;
  39.            }
  40.        }
  41.    }
  42. }
  43.  
  44.  
  45. // funkciaj ustawiajaca cookies
  46. function user_set_tokens($user_name) {
  47.    global $hidden_hash_var,$user_name,$id_hash;
  48.    if (!$user_name) {
  49.        $feedback .=  ' ERROR - User Name Missing When Setting Tokens ';
  50.        return false;
  51.    }
  52.    $user_name=strtolower($user_name);
  53.    $id_hash= md5($user_name.$hidden_hash_var);
  54.  
  55.    setcookie('user_name',$user_name,(time()+2592000),'/','',0);
  56.    setcookie('id_hash',$id_hash,(time()+2592000),'/','',0);
  57. }
  58.  
  59. //wyswietlenie komunikatu
  60. echo $feedback. "<br>";
  61. echo $_COOKIE['user_name'];
  62. echo "<br >";
  63. echo $_COOKIE['id_hash'];
  64. ?>
  65.  
  66. <!-- Logowanie -->
  67. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  68. Imie: <input type="text" name="user_name" />
  69. Haslo: <input type="password" name="password" />
  70. <input type="submit" value="Zaloguj sie" />
  71. <br>
  72.  
  73. </body>
  74. </html>


Poprzerabialem to na swoje potrzeby i wszystko dziala. Chcialem sie tylko dowiedziec jak teraz do tego dodac sesje z wykorzystaniem cookies? Ta funkcja tworzaca cookies dziala ok, ale nie wiem za bardzo jak to teraz wszystko do tego dodac. Jestem jeszcze za glupi na samodzielne analize wiec prosze o krotkie nakierowanie jak zrobic teraz, abym po zalogowaniu zostal przeniesiony na tajna.html? W sumie juz duzo o tym czytalem, ale jakos mimo to stoje w miejscu.
sticker
po poprawnym zalogowaniu daj redirect na inną stronę albo po prostu zrob
  1. <?php
  2. include
  3. ?>
strony która ma być wyświetlona

btw. pisanie bez żadnego frameworka to raczej zły pomysł
wookieb
Zacznij od wywalenia wszystkich cookie i poczytanie...
http://php.net/session_start

jak napiszesz
Kod
session_start();

TO teraz mozesz przechowywać dane w $_SESSION i tyle teori...
saren_as
Cytat(sticker @ 27.11.2008, 12:10:25 ) *
po poprawnym zalogowaniu daj redirect na inną stronę albo po prostu zrob
  1. <?php
  2. include
  3. ?>
strony która ma być wyświetlona

btw. pisanie bez żadnego frameworka to raczej zły pomysł



Oki jezeli uzytkownik sie zalogowal popranie, dam mu redirect na tajna.php. Teraz na tej tajnej stronie mam dac cos takiego?:
  1. <?php
  2.  
  3. if (!isset($_SESSION)) {
  4. echo "<meta http-equiv=\"refresh\" content=\"0; url=index.php\">";
  5. } else {
  6. wlasciwa strona po zalogowaniu
  7. }
  8. ?>


I to jest cala filozofia sesji? Nie bardzo to rozumiem jak one zabezpieczaja...?

A co do frameworka to jeszcze nie za duzo o nich wiem, wiec narazie ucze sie ogolnie cos pisac w php. Czy powinienem jak najszybciej zaczac uzywac?

Pozdrawiam!
erix
Nie. Wstaw jakąś zmienną identyfikującą, czy jest użyszkodnik zalogowany, czy nie. Na tajnej stronie sprawdzaj, czy została ona ustawiona.

Cytat
A co do frameworka to jeszcze nie za duzo o nich wiem, wiec narazie ucze sie ogolnie cos pisac w php. Czy powinienem jak najszybciej zaczac uzywac?

Naucz się dobrze pisać w "czystym" PHP, potem się przerzuć na frameworki. IMHO.
saren_as
Cytat(erix @ 27.11.2008, 12:38:14 ) *
Nie. Wstaw jakąś zmienną identyfikującą, czy jest użyszkodnik zalogowany, czy nie. Na tajnej stronie sprawdzaj, czy została ona ustawiona.


Czy linia 34 nie jest za to odpowiedzialna? Tzn funkcja, ktora tam jest wstawiona wykonuje sie jezeli uzytkownik podal poprawne haslo i uzytkownika. Sama funkcja tworzy dwie zmienne $_COOKIE...moge je wykorzystac jako te informacje czy uzytkownik jest zalogowany czy nie?
erix
No możesz, ale skorzystaj z sesji... Nie dość, że wygodniejsze, to nie musisz się martwić o problem ciasteczek. Poza tym, wysyłanie wielu słodyczy szkodzi transmisji, bo przeglądarka musi wysyłać za każdym razem oba. winksmiley.jpg

Poczytaj o sesjach i logowaniu, już trzeci wątek, a można odsyłać setki razy: Temat: PHPMYSQLLogowanie_i_Rejestracja_problem
saren_as
Szczerze to czytalem juz o sesjach i logowaniu setki razy, ale jakos mimo to, duzo rzeczy mnie jeszcze zastanawia i dla tego zwracam sie z bezposrednia prosba o pomoc do Was. Jakos to wszystko wydaje mi sie za latwe, albo za duzo poprostu nie rozumiem.
Ok! W pliku login.php mam takie cos oczywiscie tworze to, gdy uzytkownik zalogowal sie poprawnie:
  1. <?php
  2. $_SESSION['user_name'] = $user_name;
  3. $_SESSION['id_hash'] = $id_hash;
  4. ?>


W pliku tajna.php sprawdzam to tak:
  1. <?php
  2. if (isset($_SESSION['user_name']) and isset($_SESSION['id_hash'])) {
  3. echo "Jestes zalogowany. ";
  4. } else {
  5. echo "Nie jestes zalogowany";
  6. }
  7. ?>


No i jak to teraz jest? No bo niby jetem zalogowany, ale jak bezposrednio wpisuje w przegladarke adres tajna.php tez mi wyskakuje "Jestes zalogowany" No i wlasnie to mnie boli. Jak to z tym jest?
Pozdrawiam i dzieki za dotychczasowa pomoc!
nitek
zależy jak wpisujesz w przeglądarkę? jeśli raz się zalogujesz, to sesja jest zazwyczaj trzymana, zanim nie zamkniesz okna przeglądarki. Do tej pory jesteś nadal 'zalogowany'.

Zawsze możesz zrobić tak, że jeśli ktoś poprawnie się zaloguje, to ustawiasz zmienną $_SESSION['poprawne_logowanie']=1, w każdym innym wypadku na 0. Potem sprawdzasz tylko na innych stronach, czy ta zmienna jest równa 1, a nie, czy istnieje.
saren_as
Cytat(nitek @ 27.11.2008, 16:05:58 ) *
zależy jak wpisujesz w przeglądarkę? jeśli raz się zalogujesz, to sesja jest zazwyczaj trzymana, zanim nie zamkniesz okna przeglądarki. Do tej pory jesteś nadal 'zalogowany'.

W przegladarke wpisuje bezposrednio localhost/tajna.php no i wyskakuje mi ze jestem zalogowany. Wylaczalem juz cala przegladarke i po ponownym odpaleniu mialem to samo. Co to znaczy, ze zazwyczaj sa trzymane do zamkniecia przegladarki?
Stworzylem teraz plik logout.php no i jest chyba ok bo jak sie zaloguje, a nastepnie wyloguje to juz po wpisaniu w przegladarke tajna.php wyskakuje ze nie jestem zalogowany.

Cytat(nitek @ 27.11.2008, 16:05:58 ) *
Zawsze możesz zrobić tak, że jeśli ktoś poprawnie się zaloguje, to ustawiasz zmienną $_SESSION['poprawne_logowanie']=1, w każdym innym wypadku na 0. Potem sprawdzasz tylko na innych stronach, czy ta zmienna jest równa 1, a nie, czy istnieje.

Popatrze tak jak mowisz, bo wydaje mi sie ze bedzie to lepsze rozwiazanie.

Dzieki za pomoc i zobaczymy co z tego wyjdzie!
ArekJ
Zrób sobie proste wylogowanie za pomocą session_destroy" title="Zobacz w manualu PHP" target="_manual i skorzystaj z niego. Potem zobacz ten plik z tajną zawartością...
saren_as
Cytat(ArekJ @ 27.11.2008, 16:34:55 ) *
Zrób sobie proste wylogowanie za pomocą session_destroy" title="Zobacz w manualu PHP" target="_manual i skorzystaj z niego. Potem zobacz ten plik z tajną zawartością...

Tak tez wlasnie uczynilem kilka minut przed Twoja wypowiedzia i jest ok! Mimo to dzieki za podpowiedz;)
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.