Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: SESSION

PHP PHP SESSION American English version English version

Aktivity (1)
Avatar
Neaktivní uživatel:1.4.2014 20:28

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
Neaktivní uživatelský účet
Avatar
Kejmou
Člen
Avatar
Kejmou:1.4.2014 20:30

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 Neaktivní uživatel
Vojta Pšenák:1.4.2014 20:32

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
Neaktivní uživatel:1.4.2014 21:05

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
Neaktivní uživatelský účet
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Marek Z.:1.4.2014 21:19

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:1.4.2014 22:09

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.:1.4.2014 22:48

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):2.4.2014 6:56

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
Neaktivní uživatel:2.4.2014 7:22

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
Neaktivní uživatelský účet
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:2.4.2014 10:19

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 Neaktivní uživatel
tribal.cz:2.4.2014 10:40

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
Neaktivní uživatel:2.4.2014 11:33

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

Nahoru Odpovědět 2.4.2014 11:33
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:2.4.2014 12:24

Co potřebuješ je podrobně popsáno tady: http://www.itnetwork.cz/…php-tutorial

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.