Diskuze: SESSION

PHP PHP SESSION American English version English version

Avatar
Lukáš Tesař:

Ahoj,
potřeboval bych udělat jednoduchou stránku, kde se uživatelé mohou přihlásit a aby se automaticky neodhlásili, pokud nekliknou někam jinam. Jenže nechápu příkazy session a potřeboval bych poradit, jak do session uložit kdo je přihlášený. Na netu jsem hledal ale všechny stránky, na kterých to bylo byly zastaralé (např. rok 2000, 2003 atd.)

 
Odpovědět 1.4.2014 20:28
Avatar
Kejmou
Člen
Avatar
Kejmou:

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.

 
Nahoru Odpovědět 1.4.2014 20:30
Avatar
Vojta Pšenák
Redaktor
Avatar
Odpovídá na Lukáš Tesař
Vojta Pšenák:

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.

 
Nahoru Odpovědět 1.4.2014 20:32
Avatar
Odpovídá na Vojta Pšenák
Lukáš Tesař:

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)?

 
Nahoru Odpovědět 1.4.2014 21:05
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Lukáš Tesař
Marek Z.:

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_regene­rate_id()).

Nahoru Odpovědět 1.4.2014 21:19
Chybami se člověk učí, běžte se učit jinam!
Avatar
asanos
Člen
Avatar
asanos:

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". ;)

Nahoru Odpovědět  +1 1.4.2014 22:09
Na světě je 10 typů lidí. Ti, kteří rozumí binárce a ti co nerozumí.
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na asanos
Marek Z.:

Na to jsem zapomněl, díky.. ;)

Nahoru Odpovědět 1.4.2014 22:48
Chybami se člověk učí, běžte se učit jinam!
Avatar
Denis Homolík (Alfonz):

Ještě jsem četl, že musí být volána funkce session_start() ještě před tagem <html>.

Nahoru Odpovědět 2.4.2014 6:56
Vše je možné, dokud si to myslíte!
Avatar
Lukáš Tesař:

Takže takhle:

//druhy_soubor.php
session_start()
session_regenerate_id()
$_SESSION['jmeno']=$jmeno
echo("Uživatel přihlášen: . $jmeno .")
 
Nahoru Odpovědět 2.4.2014 7:22
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:

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.

 
Nahoru Odpovědět  +1 2.4.2014 10:19
Avatar
tribal.cz
Redaktor
Avatar
Odpovídá na Lukáš Tesař
tribal.cz:

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.

 
Nahoru Odpovědět 2.4.2014 10:40
Avatar
Lukáš Tesař:

Jak to myslíš s tím session_id do db?

 
Nahoru Odpovědět 2.4.2014 11:33
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 2.4.2014 12:24
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.