Dodaj do ulubionych

php autoryzacja start_session() i include - proble

10.03.10, 09:36
Postaram sie napisac szybko i jasno:)
Mam glowa stone co zaczytuje "klasyczny" template [menu gorne, menu lewe,
stopka i glowny kontener]. Po kliknieciu na jakis link w url strony podmienia
sie zmienna go np. na index.php?go=aa, a w glownym kontenerze php'owy include
rozwiazuje go=aa i include'uje pozadana strone.
Chce ograniczyc dostep do kliku stron wymagajacy zaogowana. Mam zatem strone
login.php, gdzie pobieram user/pass i decyduje czy wraca do strony logowania,
czy moze smigac po obszarze chronionym. I tu zaczynaja sie schody: ciagle
dsotaje informacje, ze cannot send header blablabla... No i teraz jak sobie
poradzic z niestartowaniem sesji w zainkludowanych stronach, badz tez jak
napisac obsluge sesji w index.php? Czytalem o rozwiazaniu z SID, ale nie jest
do zaakceptowania...;/

Dodam jeszcze, ze jest to czysty php, bez zadnych cmsow i innych frameworkow.

Z gory dzieki za pomoc,
K.
Obserwuj wątek
    • gdotb Re: php autoryzacja start_session() i include - p 10.03.10, 10:05
      Sesja musi wystartowac zanim cokolwiek innego wyslesz dalej w kodzie.
      Skoro inkludujesz ;login.php; w dalszej czesci kodu, to sesja nie wystartuje, bo
      mase innego badziewia JUZ zostalo wyslane do przegladarki.

      Ustaw secje jako pierwsza linie w ;index.php; i kombinuj jak to pozmieniac cala
      reszte...

      Np. jesli juz includujesz ;login.php;, to ustaw w formularzu
      action="process.php" i w tym nowym, pustym pliku wklej caly skrypt logowania, i
      przekieruj uzytkownika do ostatniej strony, ktora chcial zobaczyc.
      • bosmanzino Re: php autoryzacja start_session() i include - p 10.03.10, 10:39
        Hmm, cos podobnego kombinowalem, ale wciaz mam warningi. Teraz juz nawet przy
        wylogowywaniu
        Plan jest taki, ze w kazdej zabezpieczonej stronie wstawiam include do pliku,
        ktory nie robi nic wiecej jak: if(!isset($_SESSION['SESS_ID']) ||
        (trim($_SESSION['SESS_ID']) == '')) i jak nie spelnia tych warunkow to dostajesz
        stone access denied.

        Obawiam sie, ze ustawienie startu sesji w nadrzednym pliku (index.php) nie
        zapewni kontroli dostepu do includowanych plikow, bo sesja nie bedzie sprawdzana
        na poziomie dolaczonego pliku a glownego. No chyba, ze wciaz czegos nie rozumiem...
        • gdotb Re: php autoryzacja start_session() i include - p 10.03.10, 11:18
          w pliku 'index.php' ustaw tylko session_start(), zeby sesja byla otwarta, tyle,
          ze pusta, tzn. bez zadnych zmiennych.

          Potem w 'login.php' dopiero przyporzadkuj wartosci danym zmiennym sesji i
          sprawdz zapytaniem IF czy wszystko gra.

          Mozesz tez inkludowac plik 'login.php' juz wewnatrz zabezpieczonych plikow:

          index.php:

          <?php
          session_start();

          reszta kodu
          .
          .
          .
          ?>

          zabezpieczony.php:
          <?php
          include('login.php');
          .
          zabezpieczony content
          .
          .
          ?>

          login.php:
          tutaj odwalasz calosc sprawdzania, czy sesja istnieje, czy nie, drukujesz
          formularz i sprawdzasz wyniki z pol wzgledem bazy danych, czy tez wlasnej zmiennej.

          Wtedy za kazdym razem plik login.php bedzie inkludowany i jesli sesja istnieje i
          jest OK, wyswietli sie zawartosc strony, a jesli sesji nie ma: wyswietli sie
          formularz.

          Daj znac.
          • bosmanzino Re: php autoryzacja start_session() i include - p 10.03.10, 13:10
            Dzieki za wskazowki, ale musze zajac sie praca:/ No i jeszcze jedno pytanie
            zanim zaczne googlac;)

            Czy otwarcie sesji w pliku nadrzednym (index.php) nie bedzie wymagalo
            session_start() w plikach includeowanych? Czyli w pliku login_form.php po
            sprawdzeniu poprawnosci moge smialo robic przypisania, np: $_SESSION['SESS_ID']
            = $admin['id']; $_SESSION['SESS_USERNAME'] = $admin['username'];? I wychodzi na
            to, ze kazda zabezpieczona strona musi sprawdzic, czy istnieje $_SESSION[id'] a
            przy wylogowywaniu po prosu unset na wczesniej ustawione zmienne _SESSION.
    • bosmanzino Re: php autoryzacja start_session() i include - p 10.03.10, 15:21
      Dobra, pokombinowalem i problem rozwiazany:)

      Teraz sam moge udzielac pomocy w tym temacie;)
      • gdotb Re: php autoryzacja start_session() i include - p 10.03.10, 18:32
        No, i jak ostatecznie zamieszales?
        Pochwal sie :)
        • bosmanzino Re: php autoryzacja start_session() i include - p 10.03.10, 21:08
          Nie wypada sie chwalic;)

          Na szybko: strona glowna - indedx.php
          w nia includowane sa podstrony.

          W index.php na poczatku: session_start(). Jak w includowanych stornach pojawi
          sie form do logowania to w action ma "konia roboczego" [form-executor.php].
          Form-executor w skrocie robi: sprawdza, czy haslo i login sa (jak nie to poluje
          sie, ze czegos brakuje), sprawdza user/pass w bazie [z md5], jak jest ok ustawia
          2 parametry w _SESSION.

          Kazda zabezpieczona strona na poczatku wymaga dolaczenia verify.php, ktory ma
          prosty kod: sprawdza czy sa wpisy w _SESSION i czy nie sa puste, jak nok->wywala
          access-denied:)

          Po drodze pojawilo sie jeszcze kilka funkcji do sprawdzania parametrow sesji i
          kilka innych, ale jest jedna brzydka rzecz, ktora mi sie nie podoba -"echo
          "<script language=\"JavaScript\">
          javascript:document.location.href='index.php?id=ad';</script>";" - to wpakowalem
          w przypadku jak jest access-denied. Nie uda mi sie przeslac tego przez header
          (albo jestem zbyt leniwy, zeby to wymyslic)

          Powodzenia i dzieki za wskazowki z rana:)
          K.
          • gdotb Re: php autoryzacja start_session() i include - p 10.03.10, 21:41
            Wydaje mnie sie, ze moglbys to jeszcze uproscic i zamiast verify.php inkludowac
            od razu login.php, czyli tak, jak radzilem wczesniej.

            No, ale najwazniejsze, ze dziala :)

Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka