Avatar billede mstorgaard Praktikant
19. januar 2009 - 13:13 Der er 10 kommentarer og
1 løsning

Sessions skifter ejermand

Kære Eksperter.

Jeg har igennem længere tid udviklet på en portal, som selvfølgelig bare virkede på min localhost!
Nu er den derimod blevet uploadet til Surftown servere, og jeg oplever problemer med at brugere pludselig kommer til at "dele" deres sessions. dvs. at "Anders" pludselig ser sig selv logget ind som "Mickey", uden at han reelt har logget ind som "Mickey". Det er jo rent ud sagt noget skidt, eftersom "Anders" nu har mulighed for at redigere i "Mickeys" personlige oplysninger.

Min login kode ser sådan ud:

if($_POST['loginEmail'] && $_POST['loginPass']) {
    $user_try_login = $user->user_login($_POST['loginEmail'], md5($_POST['loginPass']), $_POST['loginSave'], $_POST['goBack']);
   
}


public function user_login($email, $password, $login_save = "", $goBack = "") {
       
        global $root;
       
        $query = mysql_query("SELECT id, password, name, email, name, profileactive FROM users WHERE email = '".strtolower($email)."' AND password  = '".strtolower($password)."'") or die(mysql_error());

        if(mysql_num_rows($query)) {
       
            $user_query = mysql_fetch_array($query);
            $user_update = mysql_query("UPDATE users SET lastloginstamp = '".time()."' WHERE id = '".$user_query['id']."'") or die(mysql_error()); 
       
            $_SESSION['id'] = (int) $user_query['id'];
            $_SESSION['email'] = $user_query['email'];
            $_SESSION['name'] = $user_query['name'];
           
            //login was granted, now save cookie if user wanted to
           
                if($login_save OR isset($_COOKIE['userLogin'])) {    //if user chosed to save user or login already saved :: renew  cookie
               
                    setcookie("userLogin", "".$user_query['email']." ".$user_query['password']."", time()+60*60*24*30, "/");    //save for 30 days..
                }
               
                if(strstr($goBack,'?leave=true')) { //check if goBack variable contains url uri from previous logout
               
                    $goBack = $root;
                }
               
                if(!empty($goBack)) { //good login
               
                    header("Location: ".$goBack);
                    exit;
                }
               
            } else {
           
            if(!empty($goBack)) {    //bad login
           
                header("Location: ".$goBack);
                exit;
            }
           
        }
   
}



Min log ud funktion:

public function user_leave() {
   
    if(isset($_COOKIE['userLogin'])) {
        setcookie("userLogin", "", time()-60*60*24*30, "/");    //user chose to logout, if session was registered at login :: kill
    }
   
    session_destroy();
    session_unset();
    $_SESSION = array();
       
}

Samtidig har jeg en funktion der tjekker om man tidligere har gemt en cookie (automatisk login), som også køres på alle sider:

public function login_reader() {
       
    if(isset($_COOKIE['userLogin']) && !$_SESSION['id']) {

        $result = explode(" ", $_COOKIE['userLogin']);
        $cookieUser = $result[0];
        $cookiePass = $result[1];

            $user_try_login = $this->user_login($cookieUser, $cookiePass);
       
        }           
    }
Avatar billede erikjacobsen Ekspert
19. januar 2009 - 13:35 #1
Er det ikke bare fordi du lægger den cookie?

Du har overvejet konsekvenserne af at have en cookie liggende ude hos folk med brugernavn og password?
Avatar billede mstorgaard Praktikant
19. januar 2009 - 13:57 #2
Nej, cookien burde ikke skabe konflikt med sessions, men kan du uddybe din teori?

Og hvad er konsekvenserne af det? Password er md5-hashet.
Avatar billede erikjacobsen Ekspert
19. januar 2009 - 15:58 #3
Uddybe? Næh. Men sessions skifter ikke ejermand, og du laver noget, der er - øh - "underligt".

Det kan selvfølgelig også være noget kode du ikke viser os...
Avatar billede mstorgaard Praktikant
19. januar 2009 - 16:07 #4
Hvad er det, der er underligt? Når jeg siger skifter ejermand, så mener jeg egentlig, at sessions'nes indhold skiftes, hvor mit id fx skiftes fra 6 til 1, og jeg derved registreres som en helt anden bruger.
Avatar billede mstorgaard Praktikant
19. januar 2009 - 16:13 #5
Den skifter kun TIL id 1, men aldrig væk fra id'et 1 - jeg ved ikke, om det kan hjælpe til at isolere problemet.
Avatar billede erikjacobsen Ekspert
19. januar 2009 - 16:50 #6
Så kan det være noget kode du ikke viser.
Avatar billede mstorgaard Praktikant
19. januar 2009 - 17:18 #7
Alt relevant kode skulle gerne være vist. Har du da nogen ideer til, hvad der kan forsage den her slags fejl?
Avatar billede mstorgaard Praktikant
19. januar 2009 - 17:36 #8
Men fejlen er heller ikke konstant. Jeg oplevede den et par gange i går, men har ikke opdaget den siden. Jeg ved ikke, om det kan være forsaget af en server, der var ustabil til tider.
Avatar billede erikjacobsen Ekspert
19. januar 2009 - 21:27 #9
Nej, det tyder ikke på en ustabil server. Det bliver rent gætværk: på een af dine sider, hvor du kontrollerer om personen er logget ind, kommer du til at tilordne sessionsvariablerne til den første person i databasen.
Avatar billede mstorgaard Praktikant
19. januar 2009 - 22:34 #10
Jeg tror, jeg har fået løst problemerne. Der var nogle specifikke sider, der overskrev sessions'ne. Vil du have nogen point?
Avatar billede erikjacobsen Ekspert
19. januar 2009 - 22:37 #11
Nej tak.
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