[ Bojan Zivanovic @ 15.02.2005. 21:24 ] @
Pozdrav kolege!
Pravim neki sajt, pa mi treba mala pomoc.
U pitanju je admin panel, treba napraviti autentifikaciju korisnika, user i password se cita iz fajla, pa se uporedjuje sa vrednostima iz login formulara. Admin panel ima dva dela, read i new, koji se biraju preko linka u headeru (a href="admin.php?page=read", pa se to izvuce iz $_GET) biranje stranica se obavlja preko case switching-a. Problem je sto pri promeni stranica skipta opet izbacuje login form... Probao sam da stavim session_start() na pocetak svake stranice, ali ne radi...
Pogledajte kod:

Code:

include('include/lib.php');
session_start();
if ($_POST['username'] == $admin_user && $_POST['password'] = $admin_pass) {
    include('html/admin/header.html');
    switch($_GET['page']) {
    case "new" :
        session_start();
        include('html/admin/new.html');
        include('html/footer.html');
    break;
    case "read":
        session_start();
        include('html/admin/read.html');
        /* sad ovde neki kod, izbacen  da skratim...*/
        break;
        default:
            session_start();
            include('html/admin/index.html');
            include('html/footer.html');
        break;
        }
}
else {
    session_start();
    include('html/admin/login.html');/
}
?>

Molim vas pomozite mi... Ako moze da se odradi sve to na neki drugi nacin (cookies?), napisite.
Unapred hvala,
Bojan
[ boccio @ 15.02.2005. 22:34 ] @
A kad menjas stranice, jel ponovo saljes user/pass kroz POST? Ako ne, to je problem...Bolje ih sacuvaj u sesiji...

osim toga, jedan session_Start() na vrhu ti je dovoljan...

[Ovu poruku je menjao boccio dana 15.02.2005. u 23:38 GMT+1]
[ set_X @ 15.02.2005. 22:36 ] @
Mozda nije tacno, ali session_start() trebas da stavis na pocetku, pre include, i vise ne ( u case).

Pokusaj tako.

poz.
[ Nebojsa_S @ 15.02.2005. 23:59 ] @
Logika rada sa sesijama ide otprilike ovako. Svaka strana koju zelis da zastitis treba da ima napocetku (pre BILO KAKVOG ISPISA) kod slican ovome:
Code:
<?php session_start();
include "provera.php";
if(provera_admina()!==true) exit;
?>


Funkcija provera_admina() radi sledece:
Code:

if(isset($_SESSION['admin']))
    {
    return true;
    }    
     // autorizacija
     if (count ($_POST) == 0) 
     {
          show_auth_form ();
          return false;
     }
     else
      {
          $user = $_POST['u'];
          $pass = $_POST['p'];
          if (empty ($user) || empty ($pass)) 
          {
               show_auth_form ('Molimo unesite username i password');
               return false;
          }
          if (auth_admin($user, $pass) !== true) {
          
               show_auth_form ('Login neuspesan, pokusajte ponovo');
               return false;
          }
     }
     // ako smo dovde dosli, user je proveren , pa ga upisujemo u sesiju
    $_SESSION['admin']=$_POST['u'];
     return true;

Funkcija show_auth_form() pokazuje formular za unos usr/pass , a funkcija auth_admin($user,$pass) vrsi stvarnu poredjenje unetih i zapamcenih podataka.
Sve navedene funkcije nalaze se u posebnom fajlu "provera.php", koji uvek na pocetku inkludujes.
Nadam se da ce ti ovo pomoci. Pozdrav
[ set_X @ 16.02.2005. 08:48 ] @
Bice ti korisno da stavis link za logout:

Code:

echo "<br><a href=\"" . $_SERVER['PHP_SELF'] . "?act=logout\">Logout</a><br>";


A kod za logout:

Code:

if ($_GET['act'] == "logout") {
       session_destroy();
// ovde npr. link za back to index...
}


poz.
[ Jbyn4e @ 16.02.2005. 14:04 ] @
Tacnije, nesto ovako:
Code:

        {
        session_unset();
        session_destroy();
}

ne secam se sad zasto to bese treba i unset i destroy, ali znam da sam procitao da treba...

[ Bojan Zivanovic @ 16.02.2005. 19:48 ] @
Hm, svi ovi predlozi (session_start pre include...) mi nisu pomogli (i dalje ne radi)
Da malo pojasnim...
Evo sta hocu da postignem; admin otvori stranu i dobije formu za login... Vrednosti iz forme se uporedjuju sa vrednostima iz settings.php, ako su ok prikazuje sajt. E sad sajt ima tri dela koja se prikazuju pomocu case/switch a pristupa im se pomocu linkova na vrhu sajta koji vode na admin.php?page=nesto, zatim se page izvuce iz $_Get i to bi trebalo da je to... Mozda je u tome problem...Medjutim prilikom prelaska sa strane na stranu on mi opet trazi login, znaci ne prebacuje kako treba... Neko je spomenuo da user i pass iz forme sacuvam u sessiju, molim neka pojasni....Ponavljam kod, ovog puta malo opsirnije, pa vi vidite sta ne valja... Dajte slobodno neko drugo resenje, samo hocu da to radi...
Znaci:
Code:

session_start();
include('include/lib.php');
if ($_POST['username'] == $admin_user && $_POST['password'] = $admin_pass) {
    include('html/admin/header.html');
    switch($_GET['page']) {
    case "new" :
        include('html/admin/new.html');
        include('html/footer.html');
    break;
    case "read":
        include('html/admin/read.html');
        // Kod za bazu... nebitno...
        break;
        default:
            include('html/admin/index.html');
            include('html/footer.html');
        break;
        }
    }    
else {
    include('html/admin/login.html');
}
?>

Znaci to ne radi... Pisite predloge, kolacici, sesije, sve...
Odradio sam sve to bio sa HTTP_AUTH, ali server na kome sam sve to testirao je imao PHP da radi kao CGI, ali tada to nije dostupno... Da li se PHP cesto koristi ovako? Bas mi bedno, kod je radio...
Sta cu kada moram da zaobilazim glupe administratore i da se prilagodjavam debiilnim instalacima...
[ Jbyn4e @ 17.02.2005. 08:28 ] @
Hm, mozda ti npr. ova stranica pomogne da vidis logiku:
http://php.codenewbie.com/arti...ogin_With_Sessions-Page_1.html
Inace mozes da trazis preko gugla na reci "php session login" i eventualno "tutorial" i dobices hrpu linkova gde je to objasnjeno...
[ boccio @ 17.02.2005. 08:55 ] @
Ajmo ispocetka...

Obrati paznju na ovu liniju koda:
if ($_POST['username'] == $admin_user && $_POST['password'] = $admin_pass) {

To funkcionise normalno kada dodjes sa login strane i imas popunjen POST niz, medjutim kad krenes da prelazis sa strane na stranu iz linkova u vrhu, tog POST-a vise nema! I naravno da if() vraca FALSE i baca te ponovo na login stranu...

Dakle, resenje tvog problema je ili da non-stop "refilujes" POST niz sa:
$_POST['username'] = $admin_user;
$_POST['password'] = $admin_pass;

ili, sto je po meni elegantnije, da potpuno batalis taj POST, i prenosis user/pass preko sesije. Za to ti je Jbyn4e dao lep link (tutorial) - prostudiraj i odradi to...


[ Bojan Zivanovic @ 18.02.2005. 10:35 ] @
Namestio sam, radi!
Hvala vam mnogo na pomoci!