Avatar billede danco Nybegynder
22. oktober 2008 - 23:46 Der 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.
Avatar billede micc Nybegynder
23. oktober 2008 - 00:07 #1
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.
Avatar billede danubii Nybegynder
23. oktober 2008 - 08:37 #2
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.
}

super enkelt. :)
Held og lykke.
Avatar billede coderdk Praktikant
23. oktober 2008 - 08:38 #3
session_start();

i starten alle scripts (ikke engang et mellemrum før!) der bruger sessionsvariable, derefter kan du sætte:

$_SESSION['variabelnavn'] = 'blah';

og du tilgår den på samme måde: $_SESSION['variabelnavn']

evt:

<?php

session_start();

if ( empty( $_SESSION['username'] ) )
{
  header("location: login-side.php");
  exit;
}

Derefter bliver de ledt hen på login-side.php hvis de ikke er logget ind - bemærk at login-side.php IKKE skal have denne kode ;)
Avatar billede danco Nybegynder
23. oktober 2008 - 12:57 #4
;; Coderdk ;;

jeg kan bedst lide din løsning, og tak for den detaljeret forklaring, men:

$_SESSION['username']='blah'; Jeg går udfra at "blah" ville være brugernavnet her,
men hvordan bliver 'blah' til en variabel?

Ellers ville det vel bare kræve en succesfuld login for at have adgang til alle siderne uanset login oplysninger,

eller har jeg misforstået noget fuldstændig her?
Avatar billede danco Nybegynder
23. oktober 2008 - 13:04 #5
;; Danubi ;;

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
Avatar billede coderdk Praktikant
23. oktober 2008 - 13:30 #6
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 :)
Avatar billede coderdk Praktikant
23. oktober 2008 - 13:31 #7
danubii's svar brugte sessions ;)
Avatar billede danco Nybegynder
23. oktober 2008 - 19:06 #8
Coderdk

lad os sige at jeg har 2 brugere:

Jens --> http://domæne/login/Jens/
Birgit --> http://domæne/login/Birgit/

Vil det så ikke resultere i at Jens kan se Birgits side hvis han er logget ind?
Avatar billede danco Nybegynder
23. oktober 2008 - 19:06 #9
Altså vel og mærke hvis han har den direkte URL ,,
Avatar billede coderdk Praktikant
24. oktober 2008 - 02:19 #10
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'
Avatar billede danco Nybegynder
24. oktober 2008 - 10:24 #11
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  |
          |________| 

          __________
          |        |
Jens  ----| side  |
          |________| 

          __________
          |        |
Hans  ----| side  |
          |________|
Avatar billede danubii Nybegynder
24. oktober 2008 - 11:29 #12
Hej ..

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..
Avatar billede danco Nybegynder
25. oktober 2008 - 03:23 #13
danubii ,

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?
Avatar billede danubii Nybegynder
25. oktober 2008 - 16:41 #14
Tror ik helt jeg fatter hvad det er du vil bruge dette til ?

Hvis det f.eks. er personlig side, kan du jo bar hente fra databasen hvor alle dataene tilhører brugeren ?
Avatar billede danubii Nybegynder
25. oktober 2008 - 16:45 #15
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]'";

while(sqldata = mysql_fetch_arrays(query))
{
$_SESSION['brugernavn'] = $sqldata['brugernavn'];
// osv osv?
}
Avatar billede danco Nybegynder
27. oktober 2008 - 23:47 #16
Danubii ;;

Korrekt, det kan ikke være mere simpelt at oprette den session,

der hvor min tekniske kunnen kommer i vanskeligheder er ved tjekke om session er aktiv.

Hvis jeg bruger $_SESSION['Username'] og John så logger på, så vil det hedder $_SESSION['John']

Men skal jeg så kode det manuelt hver gang jeg indsætter en ny side i form af

if (isset($_SESSION['john'])){

det er egentlig bare det jeg vil vide.
Avatar billede diablo925 Nybegynder
08. februar 2009 - 13:59 #17
blander mig lige

til #10

hvis man nu har et level system

og kun folk med session med user_level 4 eller over må komme ind på siden

skal man så skrive

if(!isset($_SESSION['username']) && (!$_SESSION['user_level']=='>=4'))
Avatar billede diablo925 Nybegynder
10. februar 2009 - 15:50 #18
bump
Avatar billede coderdk Praktikant
10. februar 2009 - 16:46 #19
if ( !isset( $_SESSION['user_level'] ) && $_SESSION['user_level'] >= 4 )

vel
Avatar billede coderdk Praktikant
10. februar 2009 - 16:46 #20
sludder

if ( isset( $_SESSION['user_level'] ) && $_SESSION['user_level'] >= 4 )
Avatar billede coderdk Praktikant
10. februar 2009 - 16:47 #21
eller omvendt:

if ( !isset( $_SESSION['user_level'] ) || $_SESSION['user_level'] < 4 ) die("Ingen adgang");
Avatar billede diablo925 Nybegynder
10. februar 2009 - 17:43 #22
virker ikke
Avatar billede coderdk Praktikant
10. februar 2009 - 17:50 #23
Jo. Hvis $_SESSION['user_level'] er sat og er et tal, så virker det ;)
Avatar billede diablo925 Nybegynder
10. februar 2009 - 18:11 #24
jo havde ikke set du haved skrevet igen :/

1000 tak så kan jeg få lidt mere sikkerhed i mit script
Avatar billede danco Nybegynder
30. august 2009 - 16:31 #25
--Lukker--
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester