[PHP cookies / sessions] Blijf niet ingelogd

Pagina: 1
Acties:
  • 161 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 19-09 01:03
Bovenaan elke pagina van een projectje van mij wordt deze functie aangeroepen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function logincheck() {
    session_start();
    if(!isset($_SESSION['userid'])) {
        if(isset($_COOKIE['username']) && isset($_COOKIE['password'])) {
            $username = addslashes($_COOKIE['username']);
            $password = addslashes($_COOKIE['password']);
            login($username, $password);
        } else {
            header('Location: login.php');
        }
    }
}

Mocht de sessie ontbreken, maar de cookies staan nog wel op je systeem, zou het ding alsnog moeten inloggen met deze functie:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function login($nickname, $password) {
    global $db;
    if ($row = $db->query_first("SELECT * FROM `users` WHERE `nickname_user` = '{$nickname}' AND `password_user` = '{$password}' LIMIT 1")) {
        setcookie('nickname', $nickname, time() + 31536000);
        setcookie('password', $password, time() + 31536000);
        $_SESSION['userid'] = $row['id_user'];
        $_SESSION['template'] = $row['template_user'];
        header('Location: index.php');
    } else {
        setcookie('nickname', $nickname, time() - 3600);
        setcookie('password', $password, time() - 3600);
        header('Location: login.php');
    }
}

Bij login(); start ik de sessie bovenaan in het loginscript als je handmatig wil inloggen, en de session is al gestart door logincheck() als de login automatisch moet gebeuren.

Als ik naar de site toe ga met een nieuwe browsersessie, is mijn PHPSESSID cookie weg, en kijk ik naar een login scherm. Ik zou toch verwachten dat ik, omdat ik de username en password cookies heb staan, er een nieuwe sessie wordt gestart, ik gewoon wordt ingelogd, en geforward naar index.php...

[ Voor 27% gewijzigd door _eXistenZ_ op 24-05-2006 09:05 ]

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:26

momania

iPhone 30! Bam!

eXistenZ_NL schreef op woensdag 24 mei 2006 @ 09:02:
Bovenaan elke pagina van een projectje van mij wordt deze functie aangeroepen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function logincheck() {
    session_start();
    if(!isset($_SESSION['userid'])) {
        if(isset($_COOKIE['username']) && isset($_COOKIE['password'])) {
            $username = addslashes($_COOKIE['username']);
            $password = addslashes($_COOKIE['password']);
            login($username, $password);
        } else {
            header('Location: login.php');
        }
    }
}
Is de aanroep van die functie wel de eerste call in je pagina? Dus nog voor je html code hebt of andere php zaken doet die output leveren?
Als de session_start() wordt aangeroepen nadat er al data op de response is gezet, doet deze niks nml ;)

[ Voor 38% gewijzigd door momania op 24-05-2006 09:07 ]

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 19-09 01:03
Nee dat zit allemaal wel goed ;)
Dan krijg je ook zo'n blije Ouput started at line blabla error.

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • dennis112
  • Registratie: Oktober 2003
  • Laatst online: 11-09 00:25
Je hebt een fout zitten waar je de sessie controleert. Je controleert namelijk eerst of de sessie bestaat en daarna controleer je nogmaals of de cookies bestaan. Maar als je een nieuwe browsersessie opent en hij gaat controleren, dan kijkt die eerst of er een sessie is, en die is er dus niet dus springt die verder naar regel 8 naar de else, hij controleert de cookies dus helemaal niet.

Asus P6T Deluxe, Intel Core i7 920, 6Gb 1333Mhz DDR3, 2 x Sapphire HD5830 in Crossfire


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 19-09 01:03
dennis112 schreef op woensdag 24 mei 2006 @ 09:17:
Je hebt een fout zitten waar je de sessie controleert. Je controleert namelijk eerst of de sessie bestaat en daarna controleer je nogmaals of de cookies bestaan. Maar als je een nieuwe browsersessie opent en hij gaat controleren, dan kijkt die eerst of er een sessie is, en die is er dus niet dus springt die verder naar regel 8 naar de else, hij controleert de cookies dus helemaal niet.
Niet, let op de ! voor de !isset bij session.
Alleen als de sessie niet bestaat, checktie op de cookies, waarna ie je eventueel alsnog inlogd.
Als de sessie wel bestaat, ben je al ingelogd en mag je sowieso verder.

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Er staat op regel 3 toch ook een ! isset(), dus controleert hij juist wel de cookies daarna toch ?

Zie verder weinig raars opzich. Geeft je select query (regel 3 van je login) verder wel een goede syntax met die enkele quotes etc ?
Staat daar dus wat je verwacht, of zoekt hij letterlijk op '{$nickname}' in je DB ?

Edit: Mijn eerste regel was bedoeld voor dennis112 :)

[ Voor 13% gewijzigd door Psychokiller op 24-05-2006 09:28 ]


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 19-09 01:03
Dat is de pwnage manier van querien. Werkt perfect.
`naam` gebruik ik zodat mijn dinges met de volgende versie van mysql compatible is, misschien is een naam die ik gebruik dan wel gereserveerd, maar nu werkt et alsnog.
En {variabele} gebruik ik voor als ik $_SESSION['fff'] wil querien. Dan ziettie et als 1 variabele, als je de query met een ' zou beginnen, ipv met een " zoals ik doe, afaik.

[ Voor 78% gewijzigd door _eXistenZ_ op 24-05-2006 09:30 ]

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • MadMurdock
  • Registratie: Oktober 2000
  • Niet online
Je zet een cookie 'nickname' en je checkt op een cookie 'username'.. Wel logisch dan dat die 'm niet kan vinden ;)

Btw, ik zou nooit username/password opslaan in een cookie, maar gewoon werken met sessionid's. En per session id op de server bijhouden van welke user deze was en of die nog ingelogd is.

Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Daar komtie dus wel en die query ziet er normaal uit verder ?
Je hebt de pass in de DB ook niet toevallig MD5 gecodeerd staan, en waar je hier dus niks mee doet ?

Edit: Wat MadMurdock wil ook wel meespelen ja :P

[ Voor 15% gewijzigd door Psychokiller op 24-05-2006 09:31 ]


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 19-09 01:03
MadMurdock schreef op woensdag 24 mei 2006 @ 09:29:
Je zet een cookie 'nickname' en je checkt op een cookie 'username'.. Wel logisch dan dat die 'm niet kan vinden ;)

Btw, ik zou nooit username/password opslaan in een cookie, maar gewoon werken met sessionid's. En per session id op de server bijhouden van welke user deze was en of die nog ingelogd is.
OMGOMGOMGOMG!
En ik me helemaal dood zoeken :X
Thanks voor de oplossing :D

Die pass staat gewoon lekker lame plaintext in de db.
Tis voor iets dat 10 mensen zo af en toe gebruiken, mss pas ik et nog wel aan.

[ Voor 21% gewijzigd door _eXistenZ_ op 24-05-2006 09:32 ]

There is no replacement for displacement!

Pagina: 1