logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Rejestracja i logowanie w PHP z użyciem plików tekstowych, bez MySQL

Mbeat 16 Cze 2006 13:56 9620 13
REKLAMA
  • #1 2733891
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Witam. Chcę zrobić na stronie możliwość rejestracji i logowania użytkowników. Ale mam problem, szukałem w internecie, nie stety wszystko opiera się o bazy danych a ja chcę to mieć na plikach tekstowych w jak najprostrzej formie. Formularz rejestracji : NICK I HASŁO wystarczy. W przypadku nie zarejestrowania brak dostępu do podstron. Macie coś do zaproponowania, może ktoś już robił coś takiego ? Z góry thx za pomoc bo jest mi to pilnie potrzebne. Za 100% rozwiązanie problemu 30 pkt.
  • REKLAMA
  • #2 2734277
    And!
    Admin grupy Projektowanie
    Posty: 9061
    Pomógł: 175
    Ocena: 784
    Jeżeli nie chcesz bazy a umiesz obsłużyć pliki to jest to dość proste.

    W pliku zapisujesz dane (nick i hasło) w określonym porządku.
    Można np. rozdzielać nick i hasło specjalnym znakiem (zakazanym w nick i hasło). Można też zapisywać jako kolejne linie nick i hasło.

    Podczas rejestracji otwierasz plik w trybie dopisywania ('a') i dodajesz dane.

    Przy logowaniu przechodzisz przez plik i sprawdzasz czy jest dany login i hasło.

    Przy dużej aktywności serwisu mogą okazać się przydatne funkcje blokujące pliki do zapisu, odczytu.
  • REKLAMA
  • Pomocny post
    #3 2734863
    Wiciu_89
    Poziom 12  
    Posty: 15
    Pomógł: 3
    Ocena: 1
    Odczytywanie danych z plików tekstowych jest dosyć łatwe. Do tego trzeba dodać mechanizm sesyjny, aby user nie musiał wklepywać hasła na każdej podstronie, oraz logowanie oparte na Authorization.

    Logowanie:

    
    <?PHP
    //  $login - wprowadzony przez usera login do sprawdzenia
    //  $haslo - wprowadzone hasło
    
      $OK = false;
    
      $plik = fopen('users.dat', 'r');
      if($plik){
        flock($plik, LOCK_SH);
    
        while(!feof($plik) and !$OK){
          $linia = fgets($plik, 255);
          $dane = explode(',', $linia);
    
          if($dane[0] == $login and $dane[1] == $haslo){
            $OK = true;     // Zakończenie pętli
            $user = $dane[0];
          }
        }
        
        flock($plik, LOCK_UN);
        fclose($plik);
      } else echo 'Brak uchwytu do pliku.';
    
    // itp.
      
      if($OK){
        echo "Witaj $user!";
      } else {
        echo 'Spróbuj jeszcze raz.';
      }
    ?>
    


    Rejestracja:

    
    <?PHP
    //  $login - nazwa użytkownika do rejestracji
    //  $haslo - hasło
    
      $OK = false;
    
      $plik = fopen('users.dat', 'r');
      if($plik){
        flock($plik, LOCK_SH);
      
        while(!feof($plik) and !$OK){
          $linia = fgets($plik, 255);
          $dane = explode(',', $linia);
    
          if($dane[0] == $login){  // Sprawdzanie tylko loginu!
            $OK = true;            // zakończenie pętli
            $user = $dane[0];
          }
        }
        
        flock($plik, LOCK_UN);
        fclose($plik);
        if(!$OK){
          $plik = fopen('users.dat', 'a');
          flock($plik, LOCK_EX);
    
          $linia = $login.','.$haslo.",\r\n";
          fwrite($plik, $linia);
          $OK = true;
          
          flock($plik, LOCK_UN);
        } else $OK = false; 
      } else echo 'Brak uchwytu do pliku.';
    
    // itp.
      
      if($OK){
        echo 'Rejestracja zakończona powodzeniem.';  
      } else {
        echo "Login $user jest już zajęty!";
      }
    


    --
    pozdrawiam
    Wiciu
    extra(_at_)boy.pl
  • #4 2735155
    And!
    Admin grupy Projektowanie
    Posty: 9061
    Pomógł: 175
    Ocena: 784
    Poza sesjami możesz dodać setcookie() i zrobić automatyczne logowanie użytkownika. Dzięki temu będzie można zapamiętać hasło w ciastkach.

    Sesje to w zasadzie dwa polecenia sesion_start(); oraz $_SESION['zmienna'].

    Widzę że jesteś zobowiązany przelać punkty dla Wiciu_89 (przydadzą mu się) :)
  • #5 2735676
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Hehe no w sumie na starcie przyda mu się ich troche :) A można to teraz sklecić wszystko razem hm... tak łopatologicznie korzystając z powyższego kodu jak wstawić to na podstrony aby ich nie wyświetlało dla nie zalogowanych ? Z góry thx !
  • REKLAMA
  • Pomocny post
    #6 2735873
    SaraniS
    Poziom 26  
    Posty: 745
    Pomógł: 78
    Ocena: 26
    Witam
    Do tego wlasnie sluza sesje :) Po prostu przy pomyslnym zalogowaniu tworzysz nowa zmienna sesyjna, np ja uzywam do tego celu loginu (czyli niech bedzie $_SESSION['login'] ), a w poszczegolnych podstronach sprawdzasz jej istnienie - i dopuszczasz do ogladania tylko jesli istnieje:
    
    if(isset($_SESSION['login']))
    {
    // tutaj tresc strony
    }
    else
    {
    // tu obsluga niezalogowanych, np taki tekst:
    echo 'Idź sobie!';
    }
    


    Pozdrawiam :)
  • REKLAMA
  • #7 2736641
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    A mógłby ktoś jeszcze zrobić do tego formularz rejestracyjny i do logowania ? Bo sam nie stety próbowałem ale nie mogę sobie z tym poradzić :(.
  • Pomocny post
    #8 2737940
    Beleth
    Poziom 1  
    Posty: 1
    Pomógł: 1
    Kiedys cos takiego wpadlo mi w rece, Tobie sie chyba przyda :)

    index.php
    <?  
        $czas_wygasniecia_sesji = 60*30; //w sekundach
        session_start(); //wystartuj sesje (jesli istnieje to wznow, jesli nie to utworz nowa)
        setcookie(session_name(),session_id(), time()+$czas_wygasniecia_sesji, "/"); //ustaw cookie z id sesji
       
        include ('obsluga_akcji.php'); //wykonanie akcji logowania lub wylogowania
    ?>
    
    <html>
    <body>
    <? 
        if (array_key_exists('login',$_SESSION)) //sprawdz czy ktos sie zalogowal - w momencie poprawnego logowania login urzytkownika jest umieszczany w sesji
        {
            // urzytkownik zalogowany
            if (!array_key_exists('strona',$_REQUEST))
            {
                //jesli nie powiedziano ktora strone otworzyc otworz strone glowna
                $_REQUEST['strona']='strona_glowna.php';
            }
            include($_REQUEST['strona']); // otworz wybrana strone
            echo '<p><div align="center"><a href="index.php?akcja=logout">Logout</a></div>'; //dodaj przycisk wylogowania 
        }
        else
        {
            //urzytkownik nie zalogowany
            include('login.php'); // otworz strone logowania
        }
    ?>
    </body>
    </html>


    login.php
    <FORM ACTION="index.php" METHOD="POST" NAME="LoginForm">
    <INPUT TYPE="HIDDEN" NAME="akcja" VALUE="login">
    <TABLE BORDER="0" WIDTH="500" ALIGN="CENTER" CELLPADDING="0" CELLSPACING="0">
    <TR><TD HEIGHT="150" ALIGN="CENTER">
        <TABLE width="200" cellpadding="0" cellspacing="5" border="0">
            <TR><TD colspan="2" align="center" height="20" class="err">
                <?
                    if (array_key_exists('blad',$_REQUEST)) // wyswietl blad jesli zaistnial
                    {
                        echo $_REQUEST['blad'];
                    }
                ?>
                </TD></TR>
    			<TR><TD>Login:</TD><TD><INPUT TYPE="TEXT" NAME="login"></TD></TR>
            <TR><TD>Hasło:</TD><TD><INPUT TYPE="PASSWORD" NAME="haslo"></TD></TR>
            <TR><TD colspan="2" align="center"><INPUT TYPE="SUBMIT" CLASS="button" VALUE="  OK  "></TD></TR>
        </TABLE>
    </TD></TR>
    </table>
    </FORM>


    obsluga_akcji.php
    <?
    if (array_key_exists('akcja',$_REQUEST)) //jesli ma byc wykonana jakas akcja (login, logout)
    {
        if ($_REQUEST['akcja']=='login') //logowanie sie do systemu
        {
            if (array_key_exists('login',$_REQUEST)&& $_REQUEST['login']!='' && array_key_exists('haslo',$_REQUEST) && $_REQUEST['haslo']!='' ) //czy podano login i haslo
            {
                $nazwa_pliku = "hasla.txt"; // plik z haslami
                
                $hasla = array(); //oprozniamy tablice z haslami
                
    		    $fd = fopen ($nazwa_pliku, "r"); //czytani pliku z haslami
    		    $i = 0;
    		    for ($i = 0;!feof($fd);$i++) 
    		    {
    			    $hasla[$i] = fgets($fd, 4096);
    		    }
    		    fclose ($fd);
    		    
    		    $login = strtoupper($_REQUEST['login']); 	//zamien login i haslo na duze litery
    	        $haslo = strtoupper($_REQUEST['haslo']);
    
    	        $znaleziono=false;
    	        foreach ($hasla AS $loginhaslo) 
    	        {
    		        $loginhaslo = strtoupper(rtrim($loginhaslo));//zamieniamy na duze liter
    		        if ($loginhaslo == $login.':'.$haslo) //porownaj login i haslo podane z kolejnymi z pliku
    		        {  
    			        $znaleziono=true;
                        break; //nie ma juz sensu dalej szukac
    		        }
    	        }
    	        
    	        if ($znaleziono) //haslo i login urzytkownika poprawne	        
    	        {
        	        $_SESSION['login']=$_REQUEST['login']; //zapisanie loginu do sesji - po tym rozpoznajemy czy ktos sie zalogowal
    	        }
    	        else
    	        {
        	         $_REQUEST['blad'] = 'Login lub haslo nie poprawne'; //blad ktos podal nieprawidlowe login i haslo
    	        }
            }
            else
            {
                $_REQUEST['blad'] = 'Podaj login i haslo'; //blad ktos nie podal loginu i hasla
            }
        }
        
        if ($_REQUEST['akcja']=='logout') //wylogowanie sie z sysytemu
        {
            session_unset(); // niszczymy sesje zaznaczajac, ze user nie jest zalogowany
            session_destroy();
        }
    }
    ?>


    strona_glowna.php
    <div align="center">
    Witamy <b> <? echo $_SESSION['login']; ?> </b> na naszej stronie domowej
    <p>
    <a href="index.php?strona=inna_strona.php">Inna strona</a>
    </div>


    hasla.txt
    login:haslo
    user:abc


    Powinno chodzic ;)
  • Pomocny post
    #9 2737986
    Wiciu_89
    Poziom 12  
    Posty: 15
    Pomógł: 3
    Ocena: 1
    No a teraz moja wersja, miałem trochę czasu.
    Usprawniłem przy okazji trochę kod. Mam nadzieję, że nie popełniłem nigdzie błędów. U mnie działa z wyłączonym REGISTER GLOBALS.

    Logowanie.php3

    
    <?PHP
      $OK = false;
      session_set_cookie_params(2592000); // 60*60*24*30 sekund
      session_start();
      
      if(!isset($_SESSION['login'])){
        if(isset($_SERVER['PHP_AUTH_USER'])){
          $login = addslashes($_SERVER['PHP_AUTH_USER']);
          $haslo = addslashes($_SERVER['PHP_AUTH_PW']);
        
          $plik = fopen('users.dat', 'r'); 
          if($plik){ 
            flock($plik, LOCK_SH); 
        
            while(!feof($plik) and !$OK){ 
              $linia = fgets($plik, 255); 
              $dane = explode(',', $linia); 
        
              if($dane[0] == $login){  // Optymalizacja szybkości
                if($dane[1] == $haslo){ 
                  $OK = true;     // Zakończenie pętli 
                  $user = $dane[0]; 
                }
              } 
            } 
            
            flock($plik, LOCK_UN); 
            fclose($plik); 
          } else echo 'Brak uchwytu do pliku.'; 
        } 
      } else {
        $user = $_SESSION['login'];
        $OK = true;
      }
      
      if($OK){
        $_SESSION['login'] = $user;
      } else {
        header('WWW-Authenticate: Basic realm="Dostęp dla użytkownika"');
        header('HTTP/1.0 401 Unauthorized');
        session_destroy(); // Przydatne w przypadku złego zalogowania
        echo 'Brak dostępu.';
        exit;
      }
      
    // Do tego miejsca skrypt już nie dochodzi w przypadku braku dostępu
    ?>
    
    <HTML>
    <BODY>
    <H2><?PHP echo "Witamy użytkownika $user!"; ?></H2>
    <A HREF="wyloguj.php3">Wyloguj!</A>
    </BODY>
    </HTML> 
    


    Rejestracja.php3


    
    <?PHP
      $OK = false;
      session_set_cookie_params(2592000); // 60*60*24*30 sekund
      session_start();
      
      if(!isset($_SESSION['login'])){
        if(isset($_SERVER['PHP_AUTH_USER'])){
          if($_SERVER['PHP_AUTH_USER'] == 'admin' and $_SERVER['PHP_AUTH_PW'] == '90210'){
            $_SESSION['login'] = 'admin';
            $OK = true;
          }
        } 
      } else {
        if($_SESSION['login'] == 'admin'){ 
          $OK = true;
        }
      }
      
      if(!$OK){
        header('WWW-Authenticate: Basic realm="Dostęp dla admina"');
        header('HTTP/1.0 401 Unauthorized');
        session_destroy(); // Przydatne w przypadku złego zalogowania
        echo 'Brak dostępu.';
        exit;
      }
      
    // Do tego miejsca skrypt już nie dochodzi w przypadku braku dostępu 
      
      $OK = false;
      
      if(!empty($_POST['fLogin']) and !empty($_POST['fHaslo'])){
        $login = addslashes($_POST['fLogin']);
        $haslo = addslashes($_POST['fHaslo']);
    
        if(file_exists('users.dat')){ // W przypadku braku pliku zostanie on utworzony, zabezpieczenie od wyświętlania błędów 
    
          $plik = fopen('users.dat', 'r'); // Prawo tylko do odczytu
          if($plik){
            flock($plik, LOCK_SH);
          
            while(!feof($plik) and !$OK){
              $linia = fgets($plik, 255);
              $dane = explode(',', $linia); 
        
              if($dane[0] == $login){ // Sprawdzanie tylko loginu!
                $user = $dane[0];
                $OK = true; // Zakończenie pętli
              }
            }
            
            flock($plik, LOCK_UN);
            fclose($plik);
          } else echo 'Brak uchwytu do pliku.';
        }
        
        if(!$OK){
          $plik = fopen('users.dat', 'a'); // Prawo tylko do dopisywania  
          flock($plik, LOCK_EX);
    
          $linia = $login.','.$haslo.",\r\n"; // Format - "login,haslo,(koniec linii)"
          fwrite($plik, $linia);
          $OK = true;
          
          flock($plik, LOCK_UN);
        } else $OK = false; 
      }
    ?>
    <HTML>
    <BODY>
    <?PHP
      if($OK){
        echo "Zarejestrowano użytkownika \"$login\"";
      } else {
        if(isset($user)){
          echo "Login \"$user\" jest już zajęty!";
        }
      }
    ?>
    <HR><BR>
    <CENTER><H1>Rejestracja</H1></CENTER>
    <BR><BR><BR>
      <FORM ACTION="rejestracja.php5" METHOD="POSt">
        <TABLE ALIGN="CENTER" CELlSPACING="15">
          <TR>
            <TH>Login:</TH>
            <TD><INPUT TYPE="text" NAME="fLogin"></TD>
          </TR>
          <TR>
            <TH>Hasło:</TH>
            <TD><INPUT TYPE="password" NAME="fHaslo"></TD>
          </TR>
          <TR>
            <TD><INPUT TYPE="reset" VALUE="Wyczyść"></TD>
            <TD><INPUT TYPE="submit" VALUE="Dodaj"></TD>
          </TR>
        </TABLE>
      </FORM>
      <A HREF="wyloguj.php3">Wyloguj!</A>
    </BODY>
    </HTML>
    


    Wyloguj.php3

    
    <?PHP
      session_start();
      $_SESSION = array();
      session_destroy();
      
      if(isset($_COOKIE[session_name()])){ 
        setcookie(session_name(), '', -13000);
      }  
    
      echo 'Zostałeś wylogowany!';
    ?>
    


    Acha. Opcja "Wyloguj" może nie działać do następnego uruchomienia przeglądarki, ze względu na wykorzystanie systemu "Authorization".
  • #10 2738488
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Wiciu_89 napisał:
    No a teraz moja wersja, miałem trochę czasu.
    Usprawniłem przy okazji trochę kod. Mam nadzieję, że nie popełniłem nigdzie błędów. U mnie działa z wyłączonym REGISTER GLOBALS.

    Logowanie.php3

    
    <?PHP
      $OK = false;
      session_set_cookie_params(2592000); // 60*60*24*30 sekund
      session_start();
      
      if(!isset($_SESSION['login'])){
        if(isset($_SERVER['PHP_AUTH_USER'])){
          $login = addslashes($_SERVER['PHP_AUTH_USER']);
          $haslo = addslashes($_SERVER['PHP_AUTH_PW']);
        
          $plik = fopen('users.dat', 'r'); 
          if($plik){ 
            flock($plik, LOCK_SH); 
        
            while(!feof($plik) and !$OK){ 
              $linia = fgets($plik, 255); 
              $dane = explode(',', $linia); 
        
              if($dane[0] == $login){  // Optymalizacja szybkości
                if($dane[1] == $haslo){ 
                  $OK = true;     // Zakończenie pętli 
                  $user = $dane[0]; 
                }
              } 
            } 
            
            flock($plik, LOCK_UN); 
            fclose($plik); 
          } else echo 'Brak uchwytu do pliku.'; 
        } 
      } else {
        $user = $_SESSION['login'];
        $OK = true;
      }
      
      if($OK){
        $_SESSION['login'] = $user;
      } else {
        header('WWW-Authenticate: Basic realm="Dostęp dla użytkownika"');
        header('HTTP/1.0 401 Unauthorized');
        session_destroy(); // Przydatne w przypadku złego zalogowania
        echo 'Brak dostępu.';
        exit;
      }
      
    // Do tego miejsca skrypt już nie dochodzi w przypadku braku dostępu
    ?>
    
    <HTML>
    <BODY>
    <H2><?PHP echo "Witamy użytkownika $user!"; ?></H2>
    <A HREF="wyloguj.php3">Wyloguj!</A>
    </BODY>
    </HTML> 
    


    Rejestracja.php3


    
    <?PHP
      $OK = false;
      session_set_cookie_params(2592000); // 60*60*24*30 sekund
      session_start();
      
      if(!isset($_SESSION['login'])){
        if(isset($_SERVER['PHP_AUTH_USER'])){
          if($_SERVER['PHP_AUTH_USER'] == 'admin' and $_SERVER['PHP_AUTH_PW'] == '90210'){
            $_SESSION['login'] = 'admin';
            $OK = true;
          }
        } 
      } else {
        if($_SESSION['login'] == 'admin'){ 
          $OK = true;
        }
      }
      
      if(!$OK){
        header('WWW-Authenticate: Basic realm="Dostęp dla admina"');
        header('HTTP/1.0 401 Unauthorized');
        session_destroy(); // Przydatne w przypadku złego zalogowania
        echo 'Brak dostępu.';
        exit;
      }
      
    // Do tego miejsca skrypt już nie dochodzi w przypadku braku dostępu 
      
      $OK = false;
      
      if(!empty($_POST['fLogin']) and !empty($_POST['fHaslo'])){
        $login = addslashes($_POST['fLogin']);
        $haslo = addslashes($_POST['fHaslo']);
    
        if(file_exists('users.dat')){ // W przypadku braku pliku zostanie on utworzony, zabezpieczenie od wyświętlania błędów 
    
          $plik = fopen('users.dat', 'r'); // Prawo tylko do odczytu
          if($plik){
            flock($plik, LOCK_SH);
          
            while(!feof($plik) and !$OK){
              $linia = fgets($plik, 255);
              $dane = explode(',', $linia); 
        
              if($dane[0] == $login){ // Sprawdzanie tylko loginu!
                $user = $dane[0];
                $OK = true; // Zakończenie pętli
              }
            }
            
            flock($plik, LOCK_UN);
            fclose($plik);
          } else echo 'Brak uchwytu do pliku.';
        }
        
        if(!$OK){
          $plik = fopen('users.dat', 'a'); // Prawo tylko do dopisywania  
          flock($plik, LOCK_EX);
    
          $linia = $login.','.$haslo.",\r\n"; // Format - "login,haslo,(koniec linii)"
          fwrite($plik, $linia);
          $OK = true;
          
          flock($plik, LOCK_UN);
        } else $OK = false; 
      }
    ?>
    <HTML>
    <BODY>
    <?PHP
      if($OK){
        echo "Zarejestrowano użytkownika \"$login\"";
      } else {
        if(isset($user)){
          echo "Login \"$user\" jest już zajęty!";
        }
      }
    ?>
    <HR><BR>
    <CENTER><H1>Rejestracja</H1></CENTER>
    <BR><BR><BR>
      <FORM ACTION="rejestracja.php5" METHOD="POSt">
        <TABLE ALIGN="CENTER" CELlSPACING="15">
          <TR>
            <TH>Login:</TH>
            <TD><INPUT TYPE="text" NAME="fLogin"></TD>
          </TR>
          <TR>
            <TH>Hasło:</TH>
            <TD><INPUT TYPE="password" NAME="fHaslo"></TD>
          </TR>
          <TR>
            <TD><INPUT TYPE="reset" VALUE="Wyczyść"></TD>
            <TD><INPUT TYPE="submit" VALUE="Dodaj"></TD>
          </TR>
        </TABLE>
      </FORM>
      <A HREF="wyloguj.php3">Wyloguj!</A>
    </BODY>
    </HTML>
    


    Wyloguj.php3

    
    <?PHP
      session_start();
      $_SESSION = array();
      session_destroy();
      
      if(isset($_COOKIE[session_name()])){ 
        setcookie(session_name(), '', -13000);
      }  
    
      echo 'Zostałeś wylogowany!';
    ?>
    


    Acha. Opcja "Wyloguj" może nie działać do następnego uruchomienia przeglądarki, ze względu na wykorzystanie systemu "Authorization".



    O coś takiego chodzi tylko, że chyba mój serwer nie obsługuje php3, ponieważ gdy próbuje wywołać w przeglądarce plik rejestracja.php3 zaczyna pobierać plik na dysk :( . Natomiast gdy rozszeżenie zmienię na php wszystkich plików wyskakują błędy. Wiecie co może być nie tak ??
  • #11 2738845
    Wiciu_89
    Poziom 12  
    Posty: 15
    Pomógł: 3
    Ocena: 1
    Na jakim ma Pan serwerze, jeśli jakiś darmowy i polski, to raczej nie ma php, ale są wyjątki.
    Znalazłem błędy ze ścieżkami. W niektórych miejscach trzeba poprawić rozszerzenie w linkach, z "*.php5" na "*.php3". A tak po za tym działa wyśmienicie, np. jeśli nie będzie pliku "users.dat", zostanie on automatycznie utworzony.
  • #12 2738937
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Serwer mam na yoyo.pl. Dało by się ominąć te rozszeżenia z php3 na php ??
  • Pomocny post
    #13 2739946
    And!
    Admin grupy Projektowanie
    Posty: 9061
    Pomógł: 175
    Ocena: 784
    Zmień poprostu wszystkie nazwy plików php3 na php. Zmień róznież wszytkie ścieżki w plikach z php3 na php.
    Na yoyo jest php i MySql (i phpMyAdmin).
  • #14 2740737
    Mbeat
    Poziom 21  
    Posty: 643
    Pomógł: 38
    Ocena: 52
    Hmmmm. niewiem czemu ale w obydwu przypadkach wyskakuje mi error :
    Warning: session_start(): Cannot send session cache limiter - headers already sent
    Dało by się zlikwidować cookie z tego i sprowadzić do jak najprostrzej formy ? Wystarczy aby było : okno rejestracji - NICK I HASŁO, zapis do pliku txt i logowanie.

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji prostego systemu rejestracji i logowania użytkowników w PHP z wykorzystaniem plików tekstowych zamiast bazy danych MySQL. Proponowane rozwiązania obejmują zapis loginu i hasła w pliku tekstowym (np. users.dat) z rozdzieleniem danych specjalnym znakiem lub liniami. Podczas rejestracji dane są dopisywane do pliku, a przy logowaniu plik jest przeszukiwany w celu weryfikacji danych. Zalecane jest stosowanie blokad plików (flock) dla bezpieczeństwa przy odczycie i zapisie. Do utrzymania sesji użytkownika i kontroli dostępu do podstron wykorzystuje się mechanizm sesji PHP (session_start(), $_SESSION), a także opcjonalnie ciasteczka (setcookie()) dla automatycznego logowania. Przykładowe fragmenty kodu pokazują implementację logowania opartego na plikach tekstowych oraz kontrolę dostępu na podstronach poprzez sprawdzanie istnienia zmiennej sesyjnej. Wskazano również na problemy z rozszerzeniami plików PHP3 na serwerze yoyo.pl, gdzie zaleca się zmianę rozszerzeń na .php oraz poprawę ścieżek w kodzie. Pojawił się problem z błędem "headers already sent" przy wywołaniu session_start(), sugerujący konieczność uproszczenia kodu i eliminacji wysyłania nagłówków przed rozpoczęciem sesji. Całość ma na celu stworzenie jak najprostszej formy rejestracji i logowania z minimalnym interfejsem (formularz z NICK i HASŁO) oraz zapisem do pliku tekstowego bez użycia bazy danych.
Wygenerowane przez model językowy.
REKLAMA