Autor | Zpráva | ||
---|---|---|---|
numhex Profil |
#1 · Zasláno: 1. 5. 2012, 16:29:59
Zdravím, mám vlemi specifický problém a tak jsem pro jeho lepší vysvětlení vytvořil 5 souborů, jejichž funkci popíšu v následujících několika řádcích:
Jak to funguje: Pomocí formuláře se odešlou hodnoty 'user' & 'pass' na stránku vybrat_obsah.php a pokud jsou to "správné" hodnoty, tak se 'auth' nastaví na 1 a uživateli tak bude umožněno prohlížet stránku vybrat_obsah.php, pokud ale užitel zadá "špatné" hodnoty, tak je přesměrován zpět na stránku prihlasit.php Popis problému: Problém je, že při kliknutí na odkaz, který vkládá obsah jiného souboru na aktuální stránku pomocí include, se hodnota 'auth' nastaví zpět na 0. Má to prakticky stejný efekt jako session_destroy. Tzn.: že po kliknutí na odkaz je uživatel přesměrován zpět na stránku prihlasit.php + server vypíše chyby: undefined index user & pass. Otázka tedy je: existuje nějaký způsob jak session udržet naživu i při použítí odkazu spolu s include? prihlasit.php : <?php session_unset(); ?> <html> <head> <title>Přihlašte se prosím</title> </head> <body> <div style="position:relative; margin:0px auto; padding:20px 0px 0px 0px; width:400px; background:grey; text-align:center; border:1px solid black;"> <form method="post" action="vybrat_obsah.php"> <input type="text" name="user"> <br> <input type="password" name="pass"> <br> <input type="submit" name="odeslat" value="Přihlásit se"> </form> </div> </body> </html> vybrat_obsah.php: <?php session_start(); $_SESSION['user'] = $_POST['user']; $_SESSION['pass'] = $_POST['pass']; $_SESSION['auth'] = 0; if ( $_SESSION['user'] == "slon" && $_SESSION['pass'] == "chobot123" ) { $_SESSION['auth'] = 1; } else { header('Refresh: 5; URL = prihlasit.php'); } ?> <html> <head> <title><?php echo $odkaz ?></title> </head> <body> <div style="position:relative; margin:0px auto; padding:20px 0px 0px 0px; width:400px; background:grey; text-align:center; border:1px solid black;"> <a href="vybrat_obsah.php?str=obsah1">obsah1</a> <br> <a href="vybrat_obsah.php?str=obsah2">obsah2</a> <br> <a href="vybrat_obsah.php?str=obsah3">obsah3</a> </div> <?php if (!isset($_GET['str'])) { //pokud hodnota 'str' neni nastavena, tak nedelej nic } else { //pokud hodnota 'str' je nastavena, tak: $str_var = $_GET['str']; //nacti hodnotu 'str' do promenne $str_var $odkaz = "odkazy/".$str_var.".php"; //do promenne $odkaz nacti hodnotu: odkazy(nazev slozky) / $str_var.php(nazev souboru - obsah1 nebo obsah2 nebo obsah3) include $odkaz; //napr.: include "odkazy/obsah1.php" } ?> </body> </html> -- následující soubory se nacházejí ve složce: odkazy -- obsah1.php : <h1>OBSAH 1</h1> <h1>OBSAH 2</h1> <h1>OBSAH 3</h1> |
||
suvel Profil |
#2 · Zasláno: 1. 5. 2012, 16:45:33
vybrat_obsah.php: Po kliknutí na řádek 23, 25 nebo 27 si všechny session na řádcích 4-6 vynuluješ
|
||
numhex Profil |
#3 · Zasláno: 2. 5. 2012, 08:46:32
suvel:
To je prakticky to co jsem napsal v popisu problému. Chci vědět jestli existuje nějaký způsob jak, po kliknutí na odkaz, session nevynulovat? |
||
Budulinek Profil |
#4 · Zasláno: 2. 5. 2012, 09:09:09
numhex:
samozřejmě existuje. Problém je v tom, že si automaticky při načtení stránky vybrat_obsah.php přepisuješ session řádkem 4-6. i v případě, že formulář neodešleš a tím pádem se ti (nejen) $_SESSION['auth'] nastaví na 0. V tomto případě je asi nejjednosušší to obalit podmínkou a testovat odeslání formuláře a až pak nastavovat session. |
||
suvel Profil |
#5 · Zasláno: 2. 5. 2012, 09:37:29
Pro jednoduché, spolehlivé a bezpečné fungování je stejně třeba použít databázi. Jestli ji nemáš k dispozici, dá se to nahradit souborem, ve kterém bude uloženo $jmeno a md5($heslo) a vždy v případě potřeby samostatným scriptem otestovat přihlášení a nemotat to do jiných scriptů.
|
||
numhex Profil |
#6 · Zasláno: 3. 5. 2012, 11:30:00
Díky za tipy, problém jsem vyřešil přidáním dalšiho souboru, který ověří přihlašovací jméno + heslo, nastaví hodnotu 'auth' na 1 nebo 0 a podle toho přesměruje uživatele na stránku prihlasit.php nebo vybrat_obsah.php.
|
||
Časová prodleva: 12 let
|
0