Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Login skripta sa session-ima

[es] :: PHP :: Login skripta sa session-ima

[ Pregleda: 2693 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Login skripta sa session-ima08.11.2005. u 18:19 - pre 224 meseci
Izvinite ljudi, znam da se milion puta spominjao session na forumu, citam dva sata vec arhivu, ali jos uvijek imam pitanja. ako nije problem, molio bih nekog da mi objasni u najkrace ono oko cega jos imam dileme, a ja cu probat bit sto jasniji.

dakle, generalno, koliko shvacam... (slucaj bez ikakvog koristenja cookies, da onemogucimo korisnikov utjecaj na rad)

na login.php stranici covjek ce upisat svoje usrname i pass podtke, oni ce biti obradjeni (npr. isto od login.php), usporedjeni s onim sta stoji u bazi i ako su ispravni mi cemo u session na neki nacin zapisati 'korisnik_logiran=TRUE'. (je li ovo u redu nacin ili je potencijalno sigurnosni problem?)

s druge strana, svaka zasticena stranica bi na vrhu trebala imati neki npr include 'auth.php' koji ce provjeravati postoji li session u kojem je zapisano ovo gore 'korisnik_logiran=TRUE'. ako u sessionu to stoji, sadrzaj je dostupan, ako nije, salje ga se na login.php.


mene buni slijedece:

1) kad napravimo session, generiramo ime od npr. nekog uniqeid, randa ili cega vec hocemo, kako to ime dodijelim sessionu?

2) kada taj sessionID URLom posaljem slijedecoj stranici i pokupim ga GETom, kako kod startanja sessiona (radi ispitivanja postoji li u njemu 'korisnik_logiran=TRUE') kazem da hocu session bas tog i tog imena (onog koji sam generirao u koraku 1)?

3) je li uopce potrebno prenositi sessID URLom s obzirom da je, koliko sam skonto, nesto oko toga rijeseno automatski od PHP 4.0.2. na dalje? (--enable-trans-sid)?
znaci li to da session_start(); automatski zna sta uzima, odnosno da uzima session u koji se u prethodnom requestu upisalo 'korisnik_logiran=TRUE', ili sta?


ispricavam se ako pitam gluposti ili ako nesto ovakvo postoji vec negdje objasnjeno... ja nisam uspio nac, a pored mora svega sta sam procito o tome, ovo mi je ostalo ko dilema. ako sam blentav, ispricavam se svima zajedno na tome :)




[Ovu poruku je menjao dee_ dana 08.11.2005. u 19:20 GMT+1]
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Login skripta sa session-ima08.11.2005. u 19:01 - pre 224 meseci
Da, to i funkcioniše kako si opisao, a pitanja su sasvim OK. Pokušaću da odgovorim...
Citat:
1) kad napravimo session, generiramo ime od npr. nekog uniqeid, randa ili cega vec hocemo, kako to ime dodijelim sessionu?

Ime sesije se postavlja na nivou aplikacije, ako se na serveru koriste više aplikacija, svaka može da ima svoje ime i na taj način se mogu odvojiti podaci koje čuvaju aplikacije. Recimo, mogu da budu postavljena 2 foruma i da je isti posetilac u isto vreme na jednom ulogovan a na drugom nije.
Citat:
2) kada taj sessionID URLom posaljem slijedecoj stranici i pokupim ga GETom, kako kod startanja sessiona (radi ispitivanja postoji li u njemu 'korisnik_logiran=TRUE') kazem da hocu session bas tog i tog imena (onog koji sam generirao u koraku 1)?

Dakle, prema koraku 1, o tome nema potrebe da brineš, jer stranica je deo iste aplikacije i sesija ima isto ime. Ako je ceo sajt jedinstvena aplikacija tada i nema potrebe za zadavanjem imena sesije - jer ne može doći do greške u interpretaciji podataka.
Citat:
3) je li uopce potrebno prenositi sessID URLom s obzirom da je, koliko sam skonto, nesto oko toga rijeseno automatski od PHP 4.0.2. na dalje? (--enable-trans-sid)?
znaci li to da session_start(); automatski zna sta uzima, odnosno da uzima session u koji se u prethodnom requestu upisalo 'korisnik_logiran=TRUE', ili sta?

Zna. ... Ali, pogledaj još malo po forumu o upotrebi sesije, jer se ne preporučuje da se ID sesije prenosi preko GET parametra već putem Cookija.
 
Odgovor na temu

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Re: Login skripta sa session-ima08.11.2005. u 19:16 - pre 224 meseci
hvala ti na odgovorima...

prvi dio kontam, odnosno prva dva dijela. molio bih te jos samo da mi objasnis slijedece, ako nije problem:

1) zasto uopce postoji prenosenje imena (bilo urlom bilo cookijem) ako session_start() sam zna koji je session i nema mogucnosti da se pomijesaju loncici?

2) bilo da se prenosi URLom, bilo da se prenosi cookijem, kada se procita ime sessiona iz jednog ili drugog -> kako se ono koristi? znaci, kad znam ime sessiona, kako kazem > 'pogledaj mi da li u tom konkretnom sessionu pise 'korisnik_logiran=TRUE'?


eto, to mi je jos ostalo ko nejasno.

puno hvala unaprijed!

PS
shvacam ovo da nije najpametnije URLom nego cookijem, vidio sam to na gotovo svim diskusijama oko sessiona i to mi je jasno. samo, ostaje onda ono pitanje -> sta ako je covjek iskljucio cookies? ili to nas ne briga - sam se osakatio? :)

[Ovu poruku je menjao dee_ dana 08.11.2005. u 20:19 GMT+1]
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Login skripta sa session-ima08.11.2005. u 22:11 - pre 224 meseci
Citat:
1) zasto uopce postoji prenosenje imena (bilo urlom bilo cookijem) ako session_start() sam zna koji je session i nema mogucnosti da se pomijesaju loncici?

session_start () referencira sesiju koja odgovara session.name, što je vrednost koja može da se postavlja pozivom session_name ('mojasesija'), ili se koristi default postavka. Već sam spominjao da na istom domenu mogu da se postave različite aplikacije koje koriste sesije - a tu su vrlo često varijable istih imena koje bi trebalo da imaju različite vrednosti u različitim aplikacijama...

Dakle, session_start zna za ime kada mu se kaže, a ne sam po sebi. Zato je potrebno ime uz koje se vezuje vrednost ID.
Citat:
2) bilo da se prenosi URLom, bilo da se prenosi cookijem, kada se procita ime sessiona iz jednog ili drugog -> kako se ono koristi? znaci, kad znam ime sessiona, kako kazem > 'pogledaj mi da li u tom konkretnom sessionu pise 'korisnik_logiran=TRUE'?

Znaš ime sesije i imaš vrednost uz to ime (bilo u kukiju ili u urlu). Sve ostalo nalazi se na serveru. Najčešće se sesije čuvaju u fajlovima na serveru. session_start () otvara fajl i preuzima sve vrednosti koje su prethodno postavljene (tako i podatak o logovanju...).
Citat:
sta ako je covjek iskljucio cookies? ili to nas ne briga - sam se osakatio? :)

Izgleda da jeste. Prenošenje broja sesije kroz url je potencijalna sigurnosna rupa i aplikacije jednostavno ne dozvoljavaju bilo kakvu poverljivu upotrebu bez kolačića.
 
Odgovor na temu

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Re: Login skripta sa session-ima09.11.2005. u 14:41 - pre 224 meseci
sad mi je konacno sve jasno oko ovog, puno ti hvala!

samo jos jedan detalj:

koja je razlika izmedju session_id() i session_name() ?


[Ovu poruku je menjao dee_ dana 09.11.2005. u 15:56 GMT+1]
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Login skripta sa session-ima09.11.2005. u 15:54 - pre 224 meseci
Pa name je ime sesije, a id je vrednost (jedinstvena).
 
Odgovor na temu

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Re: Login skripta sa session-ima09.11.2005. u 16:12 - pre 224 meseci
oprosti na gnjavazi, ko Boga te molim... al opet sam pogubio nit sad s tim zadnjim...

mozes li mi molim te, ako imas pri ruci, pokazat samo komad koda koji sessionu u jednom requestu dodjeljuje neko ime (recimo onaj famozni niz od 16 znakova il bilo sta drugo), a u drugom uzima to ime i koristi bas taj session? da vidim u kodu samo taj session_name i session_id... (ne treba mi dio citanja kukija, urla i ostalo)


oprosti sto te smorih :(


[Ovu poruku je menjao dee_ dana 09.11.2005. u 17:14 GMT+1]
 
Odgovor na temu

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Re: Login skripta sa session-ima09.11.2005. u 18:18 - pre 224 meseci
skonto sam, ne trebas se mucit :) ali hvala ti puno u svakom slucaju!

a za one koje jos ovako nesto buni, stavit cu primjer koji sam sad prepisivo i koji mi je pomogo:

Code:

<?php

//ovdje je definirano ovako direktno, ali to je ime varijable u cookie-ju ili URL-u u 

kojoj stoji 'onaj veliki broj'


$ime="ime sessiona"; 


//ovo kaze da cemo radit sa sessionom koji ima upravo ono ime koje smo u liniji iznad 

rekli (procitali iz cookie-ja il URL-a)


session_name($ime);  


//ovaj broj stoji zapisan u imenu sessiona

session_id("nekiuniquebroj"); 


// kad smo rekli koji session koristimo, ovo kaze 'ok, sad ga pocinjem koristit

session_start(); 

// podaci u sessionu su spremljeni u global arrayu &_SESSION[]. npr, da smo u njega 

spremili neku varijablu 'akcija'

$_SESSION['akcija'] .= "_dodavanje";
print "ime je >    " . session_name() . "<br>";
print "vrijednost >   " . session_id() . "<p>";

print $_SESSION['akcija'];

?>


refresh par puta stranicu i vidite sta se dogadja...

mozda nekom pomogne brze skontat kako ovo sve skupa radi...


pozdrav!

[Ovu poruku je menjao dee_ dana 09.11.2005. u 19:27 GMT+1]
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Login skripta sa session-ima09.11.2005. u 21:03 - pre 224 meseci
Code:
<?php
if ($_SERVER ['REQUEST_METHOD'] == 'POST')
{
    $master_password = 'lozinka';
    if ($_POST ['password'] == $master_password && $_POST ['user'] != '')
    {
        session_name ($_POST ['session_name']);
        session_start ();
        $_SESSION ['logged'] = 1;
        $_SESSION ['user'] = $_POST ['user'];
    }
    header ('Location: ' . $_SERVER ['REQUEST_URI']);
    exit;
}
$session_name = 'session_' . rand (0, 9);
session_name ($session_name);
session_start ();
$session_id = session_id ();
echo "<h3>$session_name : $session_id</h3>\r\n";
if (!isset ($_SESSION ['logged']))
{
    echo "<h1>not logged - please log in</h1>\r\n";
    echo "<form method=\"post\" action=\"{$_SERVER['REQUEST_URI']}\">\r\n";
    echo "<input type=\"hidden\" name=\"session_name\" value=\"$session_name\"/>\r\n";
    echo "<input type=\"text\" name=\"user\" /> user<br />\r\n";
    echo "<input type=\"password\" name=\"password\" /> pass<br />\r\n";
    echo "<input type=\"submit\" value=\"log in\" />\r\n";
    echo "</form>\r\n";
}
else
{
    echo "<h3>logged as {$_SESSION['user']}</h3>\r\n";
}
echo "<hr />\r\n";
echo "<a href=\"{$_SERVER['REQUEST_URI']}\">Reload</a>";
?>

 
Odgovor na temu

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Re: Login skripta sa session-ima10.11.2005. u 19:20 - pre 224 meseci
evo sam nesto sklepo... pa, ako se kome da, moze li mi rec jel to u redu?
stvar radi...samo me zanima jel to na mjestu rjesenje?

znaci, ovo je auth.php koji includeam na vrh svakog fajla za koji treba autorizacija:

Code:

<?php
    


if (!isset ($_COOKIE['sessionname'] , $_COOKIE['sessionid']))
{
    header ('Location: login.php?ref=' . $_SERVER ['HTTP_REFERER']);
    die();
}
    
else 
{
    session_name($_COOKIE['sessionname']);
    session_id($_COOKIE['sessionid']);
    session_start();
    
    if (!isset($_SESSION['logged']) || $_SESSION['logged'] != 'odobreno')
    {    
    header ('Location: login.php?ref=' . $_SERVER ['HTTP_REFERER']);
    die();
    }
    
    else
    {    
        setcookie("sessionid", session_id(), time()+900);
        setcookie("sessionname", session_name(), time()+900);
        
        print "logiran kao: " . $_SESSION['user'];
    
    }

    
}

?>



a ovo je login.php koji se zove ako covjek nije logiran:

Code:

<?php
    
$odakle = $_GET['ref'];

if (!isset ($_POST['korisnik'] , $_POST['pass']))

    Daj_Formu("Niste logirani - molim unesite svoje podatke");
    
else
{
    $user = $_POST['korisnik'];
    $pass = md5($_POST['pass']);

    $bazica = mysql_connect("server", "user", "pass")
                    or die("Nemrem spojit!");

    mysql_select_db("baza") or die("Nemrem do baze!!");

    $query = "SELECT username,password FROM users WHERE username='$user' AND password='$pass' LIMIT 1;";
    $result = mysql_query($query)
    or die("Query ne valja: " . mysql_error());
    mysql_close($bazica);
    
    $redak = mysql_fetch_assoc($result);

    if ($redak['username'] == $user && $redak['password'] == $pass)
    {
        $session_name = "sess";
        $session_id = md5(uniqid(rand(), true));
        setcookie("sessionid", $session_id, time()+900);
        setcookie("sessionname", $session_name, time()+900);
        session_name($session_name);
        session_id($session_id);
        session_start();
        $_SESSION ['logged'] = "odobreno";
        $_SESSION ['user'] = $user;        
        header ('Location:' . $odakle );
        die("bleeeee");    
    }
     
    else 
    
        Daj_Formu("Kriva usr/pass kombinacija - pokusaj ponovo!");
        
        
}

function Daj_Formu($poruka)
{



    echo "<h1> '$poruka' </h1>\r\n";
    echo "<form method=\"post\" action=\"{$_SERVER['REQUEST_URI']}\">\r\n";
//    echo "<input type=\"hidden\" name=\"session_name\" value=\"$session_name\"/>\r\n";
    echo "<input type=\"text\" name=\"korisnik\" /> user<br />\r\n";
    echo "<input type=\"password\" name=\"pass\" /> pass<br />\r\n";
    echo "<input type=\"submit\" value=\"log in\" />\r\n";
    echo "</form>\r\n";

}        

?>



jel to ok rjesenje?

PS.

kako je najlakse i najbolje provjerit $_POST unose da se zastiti od MySQL injectiona? postoji li nesto -> 'brzo i efikasno'? : )

[Ovu poruku je menjao dee_ dana 10.11.2005. u 20:53 GMT+1]
 
Odgovor na temu

SashaM
Veliki Bečkerek

Član broj: 28482
Poruke: 213
212.62.44.*



+1 Profil

icon Re: Login skripta sa session-ima13.11.2005. u 17:20 - pre 224 meseci
Hm nije mi jasno zasto bez veze komplikujete stvari? Evo primera kako ja koristim sesije veoma jednostavno i bez problema:

login.php
Code:

//recimo da su ovoj formi vec prosledjeni username i password

if (!empty($_POST['username'])) //proverava da li je prosledjen username
{
  $username=$_POST['username'];
  $password=$_POST['password'];

  //kod za proveru validnosti sifre
  //ako je sve u redu dolazi dovde:

  session_start();

  $_SESSION['sess_username']=$username;

  //salje korisnika na stranicu gde je potrebno

  header('Location: strana.php');
  exit;
}


strana.php
Code:

session_start();

//proverava da li je registovana sesija

if (!isset($_SESSION['sess_username'])) 
{
  //ako nije salje ga na stranicu za login

  header('Location: login.php');
  exit;
}

//u suprotnom sve je u redu i prikazuje stranicu


Mislim da je ovako sasvim OK i do sada nisam imao nikakvih problema sa sigurnoscu.

[Ovu poruku je menjao SashaM dana 13.11.2005. u 18:28 GMT+1]
Life happens but shit goes on
 
Odgovor na temu

[es] :: PHP :: Login skripta sa session-ima

[ Pregleda: 2693 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.