Sesije i Cookies

 

Kod programiranja u PHP-u često koristimo sesije i kolačiće (cookies). Oni nam služe kako bih recimo spremili podatke o korisniku. Sesije imaju trajanje dok je otvoren browser, dok cookies mogu imati trajanje dok je otvoren browser ili trajanje od više dana ili mjeseci.

PHP $_SESSION

Sesijama u PHP-u pristupamo preko $_SESSION. No prije nego li možemo koristiti sesije obavezno mora biti pozvana funkcija session_start(). 

<?php
     session_start();
     $_SESSION['username'] = 'web-informacije';

     echo $_SESSION['username'];
?>

U gornjem primjeru u početku PHP koda pokrećemo sesiju. Nakon toga u sesiju spremamo varijablu username. I na kraju iz sesije ispisujemo varijablu username.

Idemo u slijedećme primjeru napraviti jednostavan PHP kod za login (prijavu) korisnika. Imati ćemo dvije datoteke, jednu datoteku koja će sadržavati formu za login i provjeru podataka i drugu datoteku koja će ispisati da je korisnik prijavljen.

Datoteka login.php:

<?php
     session_start();
     $errorMsg = "";

     if(isset($_POST['username'])){
          if($_POST['username'] == "pero" && $_POST['password'] == "1234"){
               $_SESSION['logiran'] = true;
               header("Location: logiran.php");
          }else{
               $errorMsg = "Pogrešni login podaci";
          }
     }
?>
<html>
     <head>
          <title>Login</title>
     </head>
     <body>
          <form method="POST" action="">
               <?php echo $errorMsg; ?>
               Korisničko ime: <input type="text" name="username" value="" />
               <br/>
               Lozinka: <input type="password" name="username" value="" />
          </form>
     </body>
</html>

U gornjem primjeru vidimo da na početku datoteke login.php imamo PHP kod koji provjerava podatke koje je upisao korisnik u formi. Ukoliko niste upoznati sa formama i dohvaćanjem vrijednosti u PHP-u molimo da provjerite tutorial HTML Forme i PHP.

Ukoliko korisnik kao korisničko ime upiše pero i kao lozinku 1234 u session zapišemo varijablu logiran sa vrijednosti true. Ukoliko korisnik upiše krive podatke u varijablu $errorMsg postavimo vrijednost koja će se ispisati korisniku kao notifikacija da je upisao krive podatke.

Datoteka logiran.php

U ovoj datoteci samo ćemo provjeriti da li je korisnik logiran, ako je ostaviti ćemo ga na ovo stranici, ako pak nije preusmjeriti ćemo ga na login.php.

<?php
     session_start();

     if(isset($_SESSION['logiran') && $_SESSION['logiran' == true){
          // korisnik je logiran, evt neki kod ako treba ići ovdje
     }else{
          header("Location: login.php");
     }
?>
<html>
     <head>
          <title>Logiran</title>
     </head>
     <body>
          Hej, pa logiran si :)
     </body>
</html>

 

PHP $_COOKIES

Cookies rade malo drugačije nego session. Tj dohvaćanje cookie vrijednosti je identično kao kod session, samo se umjesto $_SESSION koristi $_COOKIE, dok se kod setiranja vrijednosti koristi funkcija setcookie.

bool setcookie ( string $name, string $value = "", int $expire = 0, string $path = "")

Funkcija set cookie mora biti pozvana prije nego li se išta renderira na stranicu, tj ne smije biti pozvana nakon što se krene sa HTML kodom. Kod setcookie bitan je parametar $expire koji označava do kada cookie vrijedi i on je u timestamp formatu. U slijedećem primjeru ćemo napraviti cookie varijablu username sa vrijednošću Pero i koja vrijedi 30 dana.

<?php
     $cookie_name = "username";
     $cookie_value = "Pero";
     
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 dan

     // ove dvije echo će ispisati istu vrijednost, prvi puta naziv cookie
     // varijable prosljeđujemo putem $cookie_name varijable, a u drugom
     // primjeru putem stringa "username" koji predstavlja naziv cookie varijable
     echo $_COOKIE[$cookie_name];
     echo $_COOKIE["username"];
?>

Za vježbu možete napraviti login preko cookies, slično kao kod primjera sa sesijom, samo da se koristi cookies umjesto session.

Korisno:

http://php.net/manual/en/function.setcookie.php