Diskuze: SESSION
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
zatím bych začal tím, aby si přiložil zdrojové kody co teď máš a od toho se můžeme odpíchnout dál.
Možná píšu blbosti, ale pokud vím, tak si uděláš v login.php něco jako tohle:
session_start();
//Hromada kódu
$_SESSION['jmeno'] = $jmenozdatabaze;
$_SESSION['id'] = $idzdatabaze;
Pak můžeš kontrolovat, zda je v $_SESSION['jmeno'] něco.
Asi to máš správně. V tom druhém souboru musím napsat taky na začátku session_start()?
//druhy_soubor.php
session_start()
$jmeno=$_SESSION['jmeno']
Mimochodem: je tato metoda trošku blbuvzdorná (jestli se nedá hacknout jen přepsáním adresy)?
Ano, v každém souboru ve kterém chceš pracovat se session, ho musíš začít.
Tato metoda se ošetřuje hlavně tak, že každému přihlášenému
uživateli uložíš většinou po znovu vygenerování session_id. To potom
uložím k jeho údajům do db a potom s ním pracuješ, zamezíš tak
vícenásobnému přihlášení na jediný účet naráz.
Session se ti po nějakou dobu ukládá přímo na server, záleží na life
(defaultně nastaven na dobu co je zapnutý prohlízeč).
Dá se toho zneužít například přes session_id(), který se ukládá do
cookies.
Můžeš tomu zamezit, ale tím, že ho jednoduše znovu vygeneruješ (Session
Fixation -> session_regenerate_id()).
Ještě je vhodné flagnout session pomocí httponly. Kdyby ji chtěl někdo
ukrást přes xss. Není to dokonalá obrana, ale na jednoduché útoky to
stačí...
Říkejme tomu "přední linie".
Takže takhle:
//druhy_soubor.php
session_start()
session_regenerate_id()
$_SESSION['jmeno']=$jmeno
echo("Uživatel přihlášen: . $jmeno .")
session_start() by měla být zavolána ještě před textovým výstupem. V praxi ale nemám otestováno. Já si prostě zvyknul, že má být jako první. To samé totiž platí i pro funkci header.
No hele já bych moc nevpisoval session_start() do další stránek radeji bych jiné stránky zobrazil pomocí $_GET do indexu tak to stačí jen jednou a jako bonus se vyhneš psaní opakovaného kódu pokud bys nevěděl jak na to tak mi napiš sz nebo se mrkni do základů psaní php tady na devbooku avšak bacha na bezpečnost jedná se o příkaz $_GET tak je velmi důležité ověřovat nejen existenci souboru ale i to zda do dané adresy někdo nepropašoval nějaký specialní znak teoreticky bych tam necpal ani čísla ale v praxi se tomu mnohokrát nevyhneš pokud potřebuješ například editovat text apod.
Jak to myslíš s tím session_id do db?
Co potřebuješ je podrobně popsáno tady: http://www.itnetwork.cz/…php-tutorial
Zobrazeno 13 zpráv z 13.