22. oktober 2008 - 23:46Der er
24 kommentarer og 1 løsning
Php session
Hej igen , Endnu et sikkert banalt spørgsmål fra min hånd, men da jeg stadig er i gang med at lære PHP ved egen hjælp er jeg nødsaget til at søge ekspert hjælp. Denne gang handler det om sessions til mit login system. Kort forklaret: Ved login tjekkes først om username og password passer med noget fra databasen (Mysql) hvis det gør sendes brugere videre til en URL der er defineret i databasen ('page').
------Problem------- Som det er nu kan man komme bagom login systemet ved at bruge den direkte URL, og derfor skal jeg bruge sessions. kunne forestille mig at bruge session_start($username); men da username kan være forskellig kan jeg da bruge denne?
if (isset($_SESSION['username'])){
Det har endnu ikke lykkedes mig at finde et bedre alternativ, al hjælp er velkommen.
En god, og bredt anvendt, løsning ville være følgende: Når brugeren indtaster navn og password gemmes disse (såfremt de er korrekte) i en cookie. Ved hver side der skal være "hemmelig" tjekkes der så om brugeren har en cookie med navn og password liggende og om disse passer sammen. Hvis ikke sendes man tilbage til login-siden. Cookies laver du ved hjælp af setcookie($cookienavn, $cookieværdi) og de kan læses fra det superglobale $_COOKIE array.
Hvis jeg var dig ville jeg lave en seperat session som kunne hedde $_SESSION["loggetind"] til og gemme en bool værdi. Såsom true.
Når brugeren så bliver logget ind skriver den true i sessionen, og hvis han ikke blive logget ind skriver den false. - Eller også er den tom som den ville være hvis der ikke bliver skrevet noget til den.
På din side ville du så kunne checke om brugeren er logget ind ved at skrive:
if($_SESSION["loggetind"] != false && $_SESSION["loggetind"] != null) { // Alt indhold på siden. } else { // lav redirect til logind siden. }
Jeg takker for dit svar, men jeg sætter min lid mere til sessions,
kan virke underligt eftersom jeg ikke har samme kompetance som dig, men på baggrund af alle de ting jeg har læst på nettet synes jeg sessions lyder som mere pålidelige
Ja, blah er bare indholdet af variablen, brugernavnet... Den bliver ikke til en variabel, variablen er $_SESSION['username'], som du så bare sætter hvis login er foretaget korrekt :)
Hmm der er sådan set ingen grund til at de har hver deres URL, med mindre at /login/ er et script og Jens og Birgit f.eks. er $_GET-parametre til det... Men ja, du kunne lave en folder der hed Jens og inde i dén checke om $_SESSION['username'] == 'Jens'
Den måde mit system differentierer sig på er at hver bruger har en side hvor de hver især har adgang til forskellige filer, så som billeder eller tekster. Derfor vil et alment 1 bruger system sesådan ud: __________ Jens ----| | Peter ----| side | Hans -----|________|
Derimod skal mit system fungere sådan her ,, derfor skal jeg bruge den smarteste måde at gøre det på. __________ | | Peter ----| side | |________|
Mit svar er med sessions der bliver gemt.. Hver gang du så går ind på en ny side, checker siden den session der hedder "loggind". Hvis den session er godkendt kommer man ind på siden.. Ellers kan du lave en }else { sætning og så skrive noget tekst som man skal se hvis man prøver og komme ind på en andens..
jo men min pointe er bare at en session "loggetind" vil så være ens for alle brugere og derfor vil der ikke være nogen forskel på om det er det Jens eller Peter der er logget på, og så er vi jo lige vidt.
Skal jeg virkelig bruge det så ledes at jeg bruger $_SESSION['username']; og så efterspørg det specifikke brugernavn på hver side?
Hvis du gerne vil ha den til at gemme usernamet i en session, opretter du bar en session når brugeren logger ind som hedder $_SESSION['brugernavn'] ? Det kan da ik blive mere simpelt? :s
query = "SELECT * FROM brugere WHERE brugernavn == '$_POST[brugernavn]' AND password == '$_POST[password]'";
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.