Dodaj do ulubionych

Problem z logowaniem w PHP

12.07.05, 13:05
Witam
Dostosowalem do swoich potrzeb znaleziony w intrnecie kod PHP do logowania i
wszystko fajnie dziala. Problem jest w tym, ze po pomyslnym zalogowaniu, po
ponownym zaladowaniu strony, z ktorej weszlo sie na strone przeznaczona do
logowania to kod

<?
session_start();
if($_SESSION["USER_AUTH"] = True) echo( "Zalogowano: ");
else
echo("Nie jesteś zalogowany");
?>

caly czas zwraca "Nie jesteś zalogowany". Dopiero klikniecie na linku do tej
strony (tej przed wejsciem na strone z logowaniem) powoduje
wyswietlenie "Zalogowano: "
Czy ktos moze mi doradzic co nalezy sprawdzic (poprawic) aby to dzialalo
poprawnie?
Pozdrawiam

K
Obserwuj wątek
    • szczurek1983 Re: Problem z logowaniem w PHP 12.07.05, 14:32
      Nie wiem czy Cie dobrze zrozumiałem.
      Czym przenosisz się na tą strone gdzie są problemy??
      Po kliknięciu w link jest ok bo w linku przekazywane jest ID sesji. Jeśli
      wracasz tam przyciskiem wstecz no to sesji nie ma i zwraca ze nie jestes zalogowany.
      Dałeś kod który jest poprawny ale nie wiadomo co jest do teo kodu przekazywane,
      można się tylko domyślać.
      • migo_gi Re: Problem z logowaniem w PHP 12.07.05, 22:55
        Kod ktorym przenosze sie na strone gdzie wystepuje problemwyglada nastepujaco

        $webfile = 'www.sap.sq.pl/index.php';
        $fpread = fopen($webfile, r);
        while ($str = fgets($fpread, 1000)) $quotes[] = $str;
        fclose ($fpread);
        $ile="";
        for($i=0,$l=count($quotes); $i < $l; $i++)$ile=$ile.$quotes[$i];
        print $ile;

        Z twojej odpowiedzi wnioskuje, ze trzeba jakos przekazac do strony ID sesji.
        Czy mozesz podpowiedziec jak to zrobic w PHP w skrypcie obslugujacym formularz
        <form></form>

        Pozdrawiam

        K
        • mateuszchol Logowanie, SID i bezpieczeństwo 12.07.05, 23:30
          Przyznaję szczerze, że zacytowany fragment kodu niewiele mi mówi.
          Nie widzę tam też, gdzie ustawiana jest zmienna sesyjna potwierdzająca logowanie.

          Co do formularzy przykład:
          <form action='logincheck.php' method='post'>
          Login: <input type=\"text\" name=\"login\" /> <br />
          Hasło: <input type=\"password\" name=\"pwd\" /> <br />
          <input type=\"Submit\" value=\"zaloguj\" />
          </form>

          W pliku logincheck.php:
          if (test poprawności danych logowania)
          {session_start();
          if (!session_is_registered('USER_AUTH'))
          session_register('USER_AUTH');
          $USER_AUTH="True";
          itd... np. Przekierowanie do innego pliku

          } else {echo "Nieprawidłowe hasło/login";}

          I teraz pierwsze ALE. Bo mam ich trochę :) Chętnie przyłączam się do rozmowy, bo
          sam trochę się głowię nad logowaniem ostatnio. I fajno byłoby się czegoś
          dowiedzieć. Radzę więc nie korzystać autorowi wątku ślepo z podanego rozwiązania
          i poczekać na komantarze bardziej zaawansowanych webmastahs. Zmierzam do tego,
          że nie jestem ekspertem w tej kwestii i sam mam parę pytań.
          Po pierwsze - czy inicjowanie sesji jak w przykładzie powyżej przyporządkowuje
          jej ID (a jeżeli tak, to jaki? Jeżeli nie to dlaczego :) i czy sesja taka będzie
          bezpieczna).
          Po drugie - no właśnie - czy powyzsze rozwiązanie jest bezpieczne? Czy może
          zawiera jakieś ewidentne luki bezpieczeństwa?
          Po trzecie - czy może lepiej samemu przyporządkowywać ID sesji (przez
          session_id())? A jeżeli tak, to co może być takim kluczem? Na stronie php.net
          wyjaśnienia wydają mi się w tym przypadku trochę tautologiczne. Piszę od razu -
          nie do końca je skumałem.

          Pozdrawiam!
        • migo_gi Re: Problem z logowaniem w PHP 13.07.05, 10:12
          Wiem czego nie wiem. Nie wiem jakiej uzyc procedury PHP (i jak jej uzyc) w
          skrypcie obslugujacym <form></form> aby wywolac nowa strone www przekazujac jej
          wszystko co potrzeba aby krypt z poczatku watku dzialal poprawnie. Prosze o
          pomoc

          Pozdrawiam

          K
        • szczurek1983 Re: Problem z logowaniem w PHP 13.07.05, 12:43
          współrozmówca napisał jak to zrobic za pomoca formulrza, to samo możesz wkonać w
          tym pliku gdzie jest formularz. Po prostu musiz sprawdzic czy masz zmienne z
          formularza i wtedy dac ID sesji lub nie.
          W każdym pliku gdzie używasz sesji musisz mieć session_start(); ale pewnie wiesz.
          Co do przekazywania ID to automatycznie jest ono przekazywane kiedy używasz
          linków względnych np.<a href="users/log.php">strona</a>, gdy jednak używasz
          bezwzględnych
          strona wtedy nie jest ono
          dołączone.
          Jesli chodzi o przesyłanie sesji dalej frmularzem to radze to robic metoda POST.
          Padło pytanie czy możesz własne ID sesji dać, wg mojej wiedzy nie, ale możesz
          miec własne zmienne sesji wiec nie ma z tym problemu. Powiedzmy
          $_SESSION['user']="uzytkownik". Możesz do niej przypisać co chcesz oczywiscie.
          Czy to jest bezpieczne? Jak zawsze 100% bezpieczeństwanie ma. W końcu ID jest
          przekazywane w adresie wiec jest widoczne, ale używając do tego ciastecek mozemy
          sie naktnac na ich wylaczona obsluge.
          Właściwie to każde rozwiązanie ujawnia nowe problemy :)))
          • migo_gi Re: Problem z logowaniem w PHP 13.07.05, 14:30
            Sam tego nie wymysle, dlatego mam do Ciebie prosbe o podanie gotewego kodu,
            ktory po pomyslnym zalogowaniu zaladuje strone www (np. index.php) przekazujac
            ID, tak aby po ponownym zaladowaniu tej strony skrypt
            <?
            session_start();
            if($_SESSION["USER_AUTH"] = True) echo( "Zalogowano: ");
            else
            echo("Nie jesteś zalogowany");
            ?>

            mogl wyswietlic "Zalogowano"

            Dzieki z gory
            pozdrawiam

            K
            • kuba12 Re: Problem z logowaniem w PHP 13.07.05, 14:40
              czyżby były potrzebne ciasteczka?
              ale jak ich poprawnie użyć to już nie moja działka :)
            • szczurek1983 Re: Problem z logowaniem w PHP 13.07.05, 18:23
              Nie mam Twojego kodu zeby Ci pisać gotowca, i nawet nie mam zamiaru, tu sie
              zdaje sie udziela pomocy a nie robi cos za kogos.
              Postaram sie napisac cos zrozumiałego, żebyś sobie poradził.
              powiedzmy ze masz strone na której jest formularz logowania.
              index.php
              <?php session_start()//start sesji
              if(isset($_SESSION['user']))//jezeli jest zmiennia sesyjna o nazwie user
              {
              echo "Jesteś zalogowany jako: ".$_SESSION['user']."";
              }else//jesli jej nie ma to nie jestes zalogowany i wyswietlasz formularz
              {
              echo"Zalouj się:
              <form method=\"post\" action=\"log.php\">
              <input type=\"text\" name=\"login\">
              <input type=\"password\" name=\"haslo\">
              <input type=\"submit\" name=\"submit\" value=\"Loguj\">";
              }

              ?>

              log.php

              <?php
              session_start();
              //tu sprawdzasz sobie zgodnosc podanych informacji z danymi uzytkownika np.z bazy.
              $con=mysql_connect('host', 'user', 'password');
              mysql_select_db('base_name');
              $query=mysql_query("SELECT `user` FROM `tabela` WHERE `user`="'.$login.'" AND
              `password`="'$haslo'"");
              $wiersz=mysql_fetch_array($query);
              /* jesli nie bedzie w bazie rekordu spelniajacego takie warunki funkcja zwroci
              false. Wiec jesli nie jest false to znaczy ze cos pobrano. Funkcja zwraca
              tablice wiec jesli chcemy z niej czytac wsztstkie wyniki powinnismy uzyc petli,
              ale to tylko schemat wiec odpuscilem sobie */
              if($wiersz!==false)
              {
              $_SESSION['user']=$login;//ta zmienna tez bedzie przekazana wiec zajdzie warunek
              w index.php i bedziemy zalogowani jako...
              header("Location:index.php");
              }else
              {
              header("Location:index.php");
              //lub
              print "Podałeś zły login lub hasło";
              }
              ?>

              Pisałem to bez żadnego sprawdzenia nie jest to gotowy skrypt tylko schemat ktory
              mam nadzieje Ci pomoze. Tak w ogole to poczytaj sobie o sesjach i tym co mozna
              z nimi robic, bedziesz mogl spokojnie napiac swoj system logowania.
              Użyłem przykładu z bazą danych bo czytelne sa operacje na niej. Tak mi sie
              przynajmniej wydaje.
              • migo_gi Re: Problem z logowaniem w PHP 13.07.05, 19:16
                wielkie dzieki
                wstawilem w odpowiednie miejsce

                header("Location:index.php");

                i wszystkie moje problemy po prostu zniknely

                Pozdrawiam

                K

    • mtq Re: Problem z logowaniem w PHP 22.07.05, 17:00
      Przy logowaniu nie ma złotego środka :-)
      Ale wychodzi na to, że metoda cookies jest najbezpieczniejsza (są metody na "podrzucanie" cookies) i
      po prostu wystarczy zmusić usera do włączenia cookies, albo - gdy nie ma cookies - przenosić
      identyfikator metodą GET. Jednak w tym drugim przypadku poinformowałbym usera o tym, że to
      cholernie niebezpieczne :-)

Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka