Autor | Zpráva | ||
---|---|---|---|
Microfox Profil * |
#1 · Zasláno: 2. 4. 2011, 22:39:54
Ahoj, řeším omezeni prav...uzivatele maji prava nastavena na "0". A vsichni co maji prava nastavena na 1 dostanou se na stranku kam uzivatel s "0" nemuze. Nevite nekdo jak to poresit? Musej tam bejt znaminka ale nevim jak to udelat
<?php if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=0){ echo '<div align="center"><h2>Nejsi přihlášen nebo nemáš dostatečná práva prohlížet tuto stránku</h2> </div>'; exit; } |
||
Bertram Profil |
#2 · Zasláno: 2. 4. 2011, 23:02:44
if(isset($_SESSION['prihlasen'])) { if($_SESSION['prihlasen'] == 0) { echo '<div align="center"><h2>Nejsi přihlášen nebo nemáš dostatečná práva prohlížet tuto stránku</h2></div>'; } } A co takhle if(!isset($_SESSIONS['admin'])) { echo '<div align="center"><h2>Nejsi přihlášen nebo nemáš dostatečná práva prohlížet tuto stránku</h2></div>'; } |
||
Tori Profil |
#3 · Zasláno: 2. 4. 2011, 23:04:05
Divná podmínka - klíč 'prihlasen' nesmí být definovaný a zároveň jeho hodnota musí být nenulová. To lze vůbec splnit??
if(!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1) exit; //... Sem projdou jen ti, co jsou přihlášení a zároveň mají oprávnění 1. if(!isset($_SESSION['prihlasen']) || !($_SESSION['prihlasen'] >= 1)) exit; //... Sem projdou jen ti, co jsou přihlášení a zároveň mají oprávnění rovno nebo větší než 1. |
||
Bertram Profil |
#4 · Zasláno: 2. 4. 2011, 23:15:17
Tori:
Klikni si na to isset |
||
Tori Profil |
#5 · Zasláno: 2. 4. 2011, 23:21:09 · Upravil/a: Tori
Bertram:
Ok, uznávam, pokud $_SESSION[prihlasen] === NULL, tak se Microfoxova podmínka asi splní (předpokládám, že odpovídáte na mou zčásti řečnickou otázku). |
||
Bertram Profil |
#6 · Zasláno: 2. 4. 2011, 23:31:46
Tori:
Ne, myslím tím to, že podle mého operátory ve funkci isset() nemají co dělat. |
||
Microfox Profil * |
#7 · Zasláno: 2. 4. 2011, 23:34:50
no je to stejne cele podivne....
<?php ob_start(); /* * Tetno soubor zjisti zda se takovy uzivatel s takovym heslem v databazi nachazi. * Pokud ano, do sessions o tom ulozime informaci. * Jinak se samozrejme presmerujeme zpet a dame uzivateli vedet, ze zadal spatne udaje */ session_start(); // Budeme pracovat se session, musíme je nastartovat. if(isset($_POST['jmeno'])){ require_once 'db.php'; $name = $_POST['jmeno']; $pass = md5($_POST['heslo']); $query = mysql_query("SELECT * FROM `tabulka` WHERE `mail` = '$name' and `heslo` = '$pass'") or die (mysql_error()); // Vybereme uživatele se zadaným jménem a heslem $Vysledek = mysql_fetch_array($query); $Vysledek['jmeno']; if($Vysledek['jmeno']){ // pokud tato proměnná obsahuje data, bylo zadané správné jméno a heslo // Do sessions si uložíme pár informací o přihlášeném $_SESSION['prihlasen'] = 1; $_SESSION['login'] = $Vysledek['jmeno']; $_SESSION['UserId'] = $Vysledek['id']; $_SESSION['Prava'] = $Vysledek['prava']; $bl="index.php"; header("location: $bl"); // přesměrujeme na index exit; }else{ $bl="index.php?Alert=6"; header("location: $bl"); // špatně zadané údaje exit; // echo "Zadal jsi špatné údaje"; } mysql_free_result($query); }else{ echo "Zde nic není."; } ob_end_flush(); ?> a at pouziju jakykoliv kod ktery jste sem dali tak to proste nefunguje...vubec nebere ohled na prava...jako kdyby sloupec neexistoval coz existuje a zkousel jsem menit cisla a nic...je to nake divne...nicmene ty Vase kody urcite bezpochyby jsou ok ale nevim kde je chyba :-( Uz to tady hledam tak pul hodky a urcite to bude blbost :D jen si toho vsimnout... |
||
Microfox Profil * |
#8 · Zasláno: 2. 4. 2011, 23:39:46
samozrejme ze moje podminka tedy vypada takto:
if(!isset($_SESSION['prihlasen']) || !($_SESSION['Prava'] >= 1)) |
||
Microfox Profil * |
#9 · Zasláno: 2. 4. 2011, 23:40:09
pardon... takto
if(!isset($_SESSION['prihlasen']) and @($_SESSION['Prava'] >= 1)) |
||
Jan Tvrdík Profil |
#10 · Zasláno: 2. 4. 2011, 23:50:43 · Upravil/a: Jan Tvrdík
Microfox:
Správnou podmínku zde již výše uvedla Tori: session_start(); // ... if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1) { echo 'Musíš být přihlášen'; exit; } Máš správně vyřešené odhlašování? Nesouvisející poznámka k uvedenému kódu: Proměnné $name a $pass je potřeba ošetřit funkcí mysql_real_escape_string, abys zabránil SQL injection
|
||
Microfox Profil * |
#11 · Zasláno: 2. 4. 2011, 23:54:44
Jan Tvrdík:
Tu nesouvisejici poznamku jsem nak moc nepochopil...nevim co je na tom k osetreni??? Ja mam takove tuseni ze presne tohle uz jsem jednou resil a nic jsem neosetroval...to je velmi zajimave... a jak tedy bude vypadat kod ? hm? z toho nejsem dost moudry abych pravdu rekl |
||
Bertram Profil |
#12 · Zasláno: 3. 4. 2011, 00:00:42
Tori:
Omlouvám se už pro oči nevidím na závorky, takže zítra naschle. |
||
Microfox Profil * |
#13 · Zasláno: 3. 4. 2011, 00:01:37
jo aha...tak jestli jsem spravne vyrozumel, tak muj dotaz ohledne na prava neresil ten nesouvisejici odkaz...to bylo jen upozorneni na pripadny problem v kodu... fajn, ale co ty prava co ten problem jak jsem zde popisoval? vi nekdo neco co s tim?
|
||
Jan Tvrdík Profil |
#14 · Zasláno: 3. 4. 2011, 00:06:06
Microfox:
„Tu nesouvisejici poznamku jsem nak moc nepochopil“ Pokud $_POST['heslo'] bude obsahovat apostrof ('), tak SQL dotaz skončí chybou.
„jak tedy bude vypadat kod“ $name = mysql_real_escape_string($_POST['jmeno']); $pass = md5($_POST['heslo']); // $pass není potřeba ošetřovat, protože funkce md5 vrátí vždy bezpečný řetězec $query = mysql_query("SELECT * FROM `tabulka` WHERE `mail` = '$name' and `heslo` = '$pass'") or die (mysql_error()); „co ten problem jak jsem zde popisoval?“ Zkus ho popsat lépe. Jak se projevuje to, že to vubec nebere ohled na prava? Máš správně vyřešené odhlašování? |
||
Microfox Profil * |
#15 · Zasláno: 3. 4. 2011, 12:48:17
Jan Tvrdík:
Nemyslim si ze by to melo neco spolecneho s odhlasovanim.... to je skript uplne mimo... Jinak kod na odhlaseni vypada takto: <?php ob_start(); // odhlaseni autora if(IsSet($_GET['logout']) and $_GET['logout']=="yes") { Session_Start(); // Pokud chceme pracovat se session, musíme je "nastartovat". I pokud je chceme zničit. Session_Destroy(); // Zničíme sessions } header ("location: index.php"); // přesměrujeme na index ob_end_flush(); ?> A ted jak se projevuje ten muj dany problem... if(!isset($_SESSION['prihlasen']) and !($_SESSION['Prava'] >= 2)) |
||
Jan Tvrdík Profil |
#16 · Zasláno: 3. 4. 2011, 13:20:53 · Upravil/a: Jan Tvrdík
Microfox:
„if(!isset($_SESSION['prihlasen']) and !($_SESSION['Prava'] >= 2))“ Tohle je blbost. Místo and tam musí být or .
Zkus tohle: if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['Prava'] < 2) { echo 'Musíš být přihlášen'; exit; } Poznámka na okraj: Je dobré mít všechna první písmena klíčů malým písmenem (tj. používat $_SESSION['prava'] místo $_SESSION['Prava'] ).
|
||
Microfox Profil * |
#17 · Zasláno: 3. 4. 2011, 13:30:25
Jan Tvrdík:
:-( hm tak ani toto nezabralo :-/ jeste zkusim udelat v tom predchozim souboru $_SESSION['Prava'] = $Vysledek['prava']; $_SESSION['prava'] = $Vysledek['prava']; |
||
Microfox Profil * |
#18 · Zasláno: 3. 4. 2011, 14:01:41
Koukam na to a beru to vsechno postupne...
Jako prvni soubor - login_zpracuj.php <?php ob_start(); /* * Tetno soubor zjisti zda se takovy uzivatel s takovym heslem v databazi nachazi. * Pokud ano, do sessions o tom ulozime informaci. * Jinak se samozrejme presmerujeme zpet a dame uzivateli vedet, ze zadal spatne udaje */ session_start(); // Budeme pracovat se session, musíme je nastartovat. if(isset($_POST['jmeno'])){ require_once 'db.php'; $name = mysql_real_escape_string($_POST['jmeno']); $pass = md5($_POST['heslo']); $query = mysql_query("SELECT * FROM `tabulka` WHERE `mail` = '$name' and `heslo` = '$pass'") or die (mysql_error()); // Vybereme uživatele se zadaným jménem a heslem $Vysledek = mysql_fetch_array($query); $Vysledek['jmeno']; if($Vysledek['jmeno']){ // pokud tato proměnná obsahuje data, bylo zadané správné jméno a heslo // Do sessions si uložíme pár informací o přihlášeném $_SESSION['prihlasen'] = 1; // Tak tady mame prvni informaci ulozenou do SESSION jestli je uzivatel prihlasen $_SESSION['login'] = $Vysledek['jmeno']; $_SESSION['UserId'] = $Vysledek['id']; $_SESSION['prava'] = $Vysledek['prava']; // A tady informace c.2 s kterou pracuji $bl="rs.php"; header("location: $bl"); // přesměrujeme na index exit; }else{ $bl="rs.php"; header("location: $bl"); // špatně zadané údaje exit; // echo "Zadal jsi špatné údaje"; } mysql_free_result($query); }else{ echo "Zde nic není."; } ob_end_flush(); ?> Z tohoto kodu se da vyvodit, ze do SESSION jsou spravne ulozene informace...takze podminka na nake strance kde budu kontrolovat jake ma uzivatel prava by mela fungovat... <?php if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['prava'] < 2) { echo 'Musíš být přihlášen'; exit; } ?> Nerozumim v cem je problem...kdyz to bere informaci SESSION prihlasen tak to musi vzit i ty prava... Sloupec v databazi se jmenuje prava tudiz jak je v tom ulozeni do SESSION $Vysledek['prava']; tak to je vytazeni z DB... Fakt nevidim v tomhle problem...Kdyz to mam takhle tak nemam pristup na tu danou stranku nikdy ikdyz si v DB upravim prava treba na 4 nebo na 1 proste nikdy...zahlasi to ze musim bejt prihlasen... Fakt si stim nevim rady |
||
Jan Tvrdík Profil |
#19 · Zasláno: 3. 4. 2011, 14:03:12 · Upravil/a: Jan Tvrdík
session_start(); if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['prava'] < 2) { echo "<pre>Zamítám přístup na základně následujících informací v session:\n\n"; print_r($_SESSION); echo "</pre>\n"; exit; } else { echo "<pre>Povoluji přístup na základně následujících informací v session:\n\n"; print_r($_SESSION); echo "</pre>\n"; exit; } |
||
Microfox Profil * |
#20 · Zasláno: 3. 4. 2011, 14:06:26
ani toto nepomohlo :-( Porad to hlasi "Musíš být přihlášen"
|
||
1Pupik1989 Profil |
#21 · Zasláno: 3. 4. 2011, 14:17:54
if(isset($_SESSION['prihlasen']) and $_SESSION['prava'] >= 1) Takto podobně to mám řešené i já. Nic špatně na tom není. Co vypíše echo $_SESSION['prava']; echo $_SESSION['prihlasen']; ? |
||
Microfox Profil * |
#22 · Zasláno: 3. 4. 2011, 14:23:49
1Pupik1989:
Kdyz tam dam na tu stranku echo $_SESSION['prava']; Kdyz toto echo $_SESSION['prihlasen']; Tzn. ze se teda do SESSION neulozily ty prava.... proc ale? Copak je v tom kodu neco spatne? $_SESSION['prihlasen'] = 1; $_SESSION['login'] = $Vysledek['jmeno']; $_SESSION['UserId'] = $Vysledek['id']; $_SESSION['prava'] = $Vysledek['prava']; ??? kdyz tam dam echo $_SESSION['login']; |
||
Jan Tvrdík Profil |
#23 · Zasláno: 3. 4. 2011, 14:27:02 · Upravil/a: Jan Tvrdík
// ... $Vysledek = mysql_fetch_array($query); print_r($Vysledek); exit; // ... |
||
Microfox Profil * |
#24 · Zasláno: 3. 4. 2011, 14:33:34
Hele, ted me napada asi takova jedna vec...jednu vec kterou jsem neudelal...kdyz se prece prihlasuju, uklada to informace do SESSION, myslim ze bude dobre se odhlasit a znovu prihlasit aby ty informace se do SESSION ulozily...mozna tu fakt resime pitomost :D
momentik, neco zkusim |
||
Microfox Profil * |
#25 · Zasláno: 3. 4. 2011, 14:35:39
no jasne, odhlasil jsem se, prihlasil a uz to ukazuje prava :-) kurna, me to vubec hned nenapadlo... achjooo takze ted muzu pouzit treba tento kod?
if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['Prava'] < 2) { echo 'Musíš být přihlášen'; exit; } |
||
Microfox Profil * |
#26 · Zasláno: 3. 4. 2011, 14:40:36
tak hlavne ze jsem vyresil teda ty prava ale problem je opet na zacatku kde vznikl...at mam jakykoliv nastaveny cislo, tak se stejne na tu stranku dostanu... tudiz v teto podmince
if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['Prava'] < 2) { |
||
Jan Tvrdík Profil |
#27 · Zasláno: 3. 4. 2011, 14:42:25 · Upravil/a: Jan Tvrdík
|
||
Microfox Profil * |
#28 · Zasláno: 3. 4. 2011, 14:43:07
tak asi ne...je zapotrebi se vzdycky odhlasovat a prihlasovat...ono to pri uprave vlastniho uzivatele pres web neaktualizuje session... takze problem je zrejme vyresen...
|
||
1Pupik1989 Profil |
#29 · Zasláno: 3. 4. 2011, 15:51:57
Tak jednodušše v login.php dej na začátek
session_destroy(); |
||
Časová prodleva: 13 let
|
0