Voor een website die ik aan het maken ben loop ik tegen een (in mijn ogen) vreemd probleem aan.
Voor deze site heb ik een registratie-systeem gemaakt, waarbij er bij het inloggen 2 cookies geplaatst worden, namelijk a_m_id en a_m_hash, en er worden 2 sessies aangemaakt (1 met het IP-adres van de gebruiker en 1 waarin staat of met ingelogd is of niet). De eerste cookie heeft als waarde de ID van de gebruiker, en het 2e cookie heeft een hash van 10 karakters. Deze hash staat ook in de database.
Nu wil ik dus controleren dat als iemand zijn profiel wil wijzigen, of hij/zij dan daadwerkelijk wel zijn eigen profiel aan het wijzigen is. Hiervoor had ik de volgende controle gemaakt:
Als ik bovenstaande code uitvoer, krijg ik voortdurend de error te zien dat ik geen toestemming heb om deze pagina te bekijken. Alleen het vreemde is nu dat als ik via phpmyadmin in de database kijk, dan staat daar precies dezelfde waarde als in mijn cookie...
Ik heb al het e.e.a. geprobeerd om te kijken waar het probleem ligt, en als ik het volgende doe:
Dan blijkt dat de hash uit de database leeg is bij de controle of de hash gelijk is aan de waarde van mijn cookie, maar wél werkt als ik de hash bóven de controle echo.
Ik heb ook al geprobeerd om de query via een functie te returnen en dan de uitkomst van de functie te vergelijken met de waarde van mijn cookie, maar dat werkte ook niet
Nu is mijn vraag dus hoe ik de waarde van de hash in de DB ook in de controle kan gebruiken.
Het lijkt me een héél simpel en logisch antwoord, maar ik zit er al dagen naar te kijken en kom er niet uit....
Voor deze site heb ik een registratie-systeem gemaakt, waarbij er bij het inloggen 2 cookies geplaatst worden, namelijk a_m_id en a_m_hash, en er worden 2 sessies aangemaakt (1 met het IP-adres van de gebruiker en 1 waarin staat of met ingelogd is of niet). De eerste cookie heeft als waarde de ID van de gebruiker, en het 2e cookie heeft een hash van 10 karakters. Deze hash staat ook in de database.
Nu wil ik dus controleren dat als iemand zijn profiel wil wijzigen, of hij/zij dan daadwerkelijk wel zijn eigen profiel aan het wijzigen is. Hiervoor had ik de volgende controle gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?php // Haal de hash en het wachtwoord uit de database $sql = ("SELECT m_id, m_hash, m_wachtwoord FROM members WHERE m_id = '".$_aGET[0]."'"); $result = mysql_query($sql) or die(mysql_error()); $show = mysql_fetch_assoc($result); // Kijk of de persoon is ingelogd if(!isset($_SESSION['a_ingelogd']) && $_SESSION['a_ingelogd'] != 1){ // Zonee, error weergeven show_error('Om deze pagina te kunnen bekijken dien je ingelogd te zijn!','Niet ingelogd!'); } // Indien de persoon is ingelogd, kijken of dit wel zijn profiel is elseif($_COOKIE['a_m_hash'] != $show['m_hash']) { // Zonee, error weergeven show_error('Je hebt geen toestemming om deze pagina te kunnen bekijken!','Geen rechten!'); }else{ // Hier het formulier } ?> |
Als ik bovenstaande code uitvoer, krijg ik voortdurend de error te zien dat ik geen toestemming heb om deze pagina te bekijken. Alleen het vreemde is nu dat als ik via phpmyadmin in de database kijk, dan staat daar precies dezelfde waarde als in mijn cookie...
Ik heb al het e.e.a. geprobeerd om te kijken waar het probleem ligt, en als ik het volgende doe:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <?php // Haal de hash en het wachtwoord uit de database $sql = ("SELECT m_id, m_hash, m_wachtwoord FROM members WHERE m_id = '".$_aGET[0]."'"); $result = mysql_query($sql) or die(mysql_error()); $show = mysql_fetch_assoc($result); // Dit werkt dus wél echo($show['m_hash']); // Kijk of de persoon is ingelogd if(!isset($_SESSION['a_ingelogd']) && $_SESSION['a_ingelogd'] != 1){ // Zonee, error weergeven show_error('Om deze pagina te kunnen bekijken dien je ingelogd te zijn!','Niet ingelogd!'); } // Indien de persoon is ingelogd, kijken of dit wel zijn profiel is // En in onderstaande controle werkt het niet.... elseif($_COOKIE['a_m_hash'] != $show['m_hash']) { // Zonee, error weergeven show_error('Je hebt geen toestemming om deze pagina te kunnen bekijken!','Geen rechten!'); echo("Cookie: ".$_COOKIE['a_m_hash']." - Hash: ".$show['m_hash']."<br>"); echo("Cookie: ".md5($_COOKIE['a_m_hash'])." - Hash: ".md5($show['m_hash'])."<br>"); }else{ // Form } ?> |
Dan blijkt dat de hash uit de database leeg is bij de controle of de hash gelijk is aan de waarde van mijn cookie, maar wél werkt als ik de hash bóven de controle echo.
Ik heb ook al geprobeerd om de query via een functie te returnen en dan de uitkomst van de functie te vergelijken met de waarde van mijn cookie, maar dat werkte ook niet
Nu is mijn vraag dus hoe ik de waarde van de hash in de DB ook in de controle kan gebruiken.
Het lijkt me een héél simpel en logisch antwoord, maar ik zit er al dagen naar te kijken en kom er niet uit....
[ Voor 10% gewijzigd door kleautviool op 16-10-2005 14:40 ]