Nakon ovog poglavlja
Što ćete znati napraviti
- Čitati metodu, putanju, query parametre i zaglavlja zahtjeva.
- Vratiti odgovarajući status, zaglavlje i tijelo odgovora.
- Razlikovati kolačić od poslužiteljske sesije.
Granica aplikacije
PHP sastavlja HTTP ulaz iz više izvora
Metoda zahtjeva dostupna je u $_SERVER, parametri URL-a u $_GET, a podaci klasične forme u $_POST. Ti podaci nisu pouzdani ni tipizirani. Čitamo samo očekivane ključeve, provjeravamo oblik i tek tada ih prosljeđujemo dubljem sloju.
GET treba biti siguran za čitanje i ne smije mijenjati stanje. POST stvara ili pokreće obradu, PUT ili PATCH mijenjaju, a DELETE briše. HTML forme izvorno šalju GET ili POST; framework može simulirati ostale metode.
<?php
declare(strict_types=1);
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$path = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH);
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT) ?: 1;
Jasan rezultat
Status i zaglavlja prije tijela
http_response_code postavlja status, a header zaglavlje. Zaglavlja moraju biti poslana prije prvog ispisa. Za JSON navodimo ispravan Content-Type i kodiramo podatke uz JSON_THROW_ON_ERROR.
Preusmjeravanje je odgovor s Location zaglavljem, najčešće nakon uspješnog POST-a. Obavezno prekinite izvršavanje nakon slanja redirekcije.
<?php
header('Content-Type: application/json; charset=utf-8');
http_response_code(200);
echo json_encode(
['data' => ['id' => 42, 'title' => 'Moderni PHP']],
JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE
);
Stanje kroz više zahtjeva
Kolačić putuje, sesija ostaje na serveru
HTTP je bez stanja. Kolačić je mala vrijednost koju preglednik vraća uz buduće zahtjeve. PHP sesija obično u kolačiću drži samo nasumični identifikator, dok podatke sesije čuva na poslužitelju.
Sesijski kolačić za autentikaciju treba imati Secure na HTTPS-u, HttpOnly i prikladan SameSite. Nakon prijave regeneriramo identifikator sesije kako bismo smanjili rizik session fixation napada.
<?php
session_start([
'cookie_httponly' => true,
'cookie_secure' => true,
'cookie_samesite' => 'Lax',
]);
$_SESSION['user_id'] = 17;
Primijenite naučeno
Vježba: Mali JSON endpoint
Napravite endpoint /api/status koji vraća JSON s vremenom i verzijom aplikacije.
- Dopustite samo GET i za ostalo vratite 405.
- Postavite Content-Type application/json.
- Dodajte Cache-Control: no-store jer je rezultat dijagnostički.
Za provjeru i nastavak