Avatar billede epojokke Nybegynder
03. december 2003 - 22:58 Der er 4 kommentarer og
1 løsning

Session uden bøvl

Jeg har med mit ringe PHP-kendskab magtet at lave en login-funktion og starte en session. Jeg har også fået lavet udtræk fra den pågældende brugers data fra mySQL og lagt dem i $_SESSION - so far so good.

Næste trin bliver at få brugerens data med over i underliggende funktioner, hvor man bl.a. skal kunne redigere i ens egen profil. Hvordan gør man det uden bøvl? Skal jeg bibeholde min struktur med flere filer, hvor jeg så på en eller anden måde får $_SESSION med over. Eller skal jeg oprette en klasse med funktioner som så kan kaldes fra den fil, hvor sessionen kører. I så fald hvordan?

Bedste tutorial til at opbygge undermenuer i sessions belønnes?
Avatar billede Slettet bruger
04. december 2003 - 00:29 #1
$_SESSION bliver helt automatisk "flyttet" med over på andre sider i samme domæne.

Du skal bare køre session_start(); på hver side.
Avatar billede epojokke Nybegynder
04. december 2003 - 01:12 #2
OK hvor simpelt.
Grunden til det snød mig er, at systemet ikke vil godtage min session når jeg fra en af undersiderne går tilbage til den side hvor sessionen starter. Der skal pilles i den if-sætning der tjekker for korrekt login, tror jeg.

Men betyder det så at en session kun afsluttes når man beder om det eller lukker browseren? Og er den kode der eksekveres ved forkert login tilstrækkelig?

Koden ser således ud lige nu:
<?
    session_start();
    session_register("counter");
    $SID = session_id();
    include ("db.php");
    $tjek = mysql_query("SELECT id FROM profiler WHERE brugernavn = '$_GET[navn]'    AND password = '$_GET[password]'")or die (mysql_error());
    $fits = mysql_num_rows($tjek);
    session_register(tjek);
    session_register('SID');
    if ($fits != 1)
    {
                //Afvikles hvis login er forkert
        unset($SID);
        unset($_SESSION[tjek]);
        header("Location: loginfejl.php");
        }
    else   
    {
        $counter++;
        $_SESSION[tjek] = "OK";
        // Fylder data fra profilen ned i $_SESSION
        $sql = mysql_query("SELECT * FROM profiler WHERE brugernavn = '$_GET[navn]'") or die (mysql_error());
        while ($data = mysql_fetch_array($sql)) {
            $_SESSION[id] = $data[id];
            $_SESSION[brugernavn] = $data[brugernavn];

etc. etc.
Avatar billede Slettet bruger
04. december 2003 - 01:47 #3
Fra linien med $tjek=mysql_query(... og ned til et sted længere nede end det, du har vist her, skal flyttes ind i en

if ((!isset($_SESSION['tjek'])) || $_SESSION['tjek'] != "OK") {
}

Slut-}-tegnet skal være ca. der, hvor du er færdig med at hente de indledende oplysninger til $_SESSION.

Derudover bør du nok finde et andet navn til at holde resultatet fra mysql_query end lige netop $tjek, for hvis du har register_globals sat til ON (og det tyder din kode på, at du har)  ændrer du nok også $_SESSION['tjek'], når du ændrer $tjek. (Jeg er ikke helt sikker, men uanset er navnesammenfaldet en skidt ting, som let kan skabe forvirring.)
Avatar billede epojokke Nybegynder
04. december 2003 - 01:53 #4
Jep, den sidste har jeg set i mellemtiden og rettet parametertitlen i $_SESSION til 'adgang'

Jeg roder lige med første del af dit forslag i morgen. Det lyder rimelig rigtigt. Point!
Avatar billede Slettet bruger
04. december 2003 - 01:59 #5
Så må du jo hellere få et svar.
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