[PHP] Login werkt maar half

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46
Ik heb een login-pagina gemaakt, deze werkt goed (genoeg :+)
maar nou wilde ik er ook een menu-balk bij maken, met de knop LOGIN _OF_ LOGUIT er op. en dan zo, dat als je ingelogd bent, er LOGUIT staat, en visa versa.

Het zal wel een simpel probleem zijn, maar ik heb er al 3 dagen tegenaan zitten staren, en krijg 't maar niet gevonden

hier wat relevante stukjes code:

wat er met de login gebeurt
PHP:
1
2
setcookie('UN',$_POST['UserName']);
setcookie('SID',session_id());
wat er met de loguit gebeurd
PHP:
1
setcookie('SID','',time()-360);
om te controleren of je ingelogd bent :+
PHP:
1
2
3
4
5
6
7
function ingelogd()
{
  $il = false;
  if (($_COOKIE['UN'] == 'Admin') && ($_COOKIE['SID'] == session_id()))
    $il = true;
  return $il;
}


Hopelijk zien jullie wat ik fout doe, anders moet ik maar iets anders er voor bedenken...
Alvast bedankt O+

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Moet je voor de "Admin" string geen dubbele aanhalingstekens gebruiken om aan te geven dat het een string is?

dus:
if (($_COOKIE['UN'] == "Admin") && ($_COOKIE['SID'] == session_id()))

anders kun je voor de zekerheid je cookie ff UnSet( ) ten nadat je hem setcookie(...,'',time()-1) hebt gedaan.

Wordt dat sessionID eigenlijk ook opgeslagen? want anders genereert ie dus elke keer een nieuw (random?) ID.

[ Voor 90% gewijzigd door cobratbq op 17-08-2003 22:18 ]

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ik doe zelf nooit wat met cookies, maar als je een cookie aanmaakt of delete zie je dat toch pas bij de volgende refresh? is dat je probleem niet?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Gebruik je hier nu sessies of cookies. De code die je geeft impliceert cookies, maar vervolgens maak je wel gebruik van de functie session_id().

A;s je wel gebruik maakt van sessions is dit systeem zo lek als een mandje. De sessie ID kan ik heel makkelijk zelf achterhalen (of zelfs een waarde van mijn keuze nemen) en een cookie is ook zo aangepast. Zet naam + een geldige sessie ID erin en ik ben admin.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46
Na elke actie met een cookie wordt er meteen gerefreshed, en een " of ' maakte geen verschil

De functie geeft altijd het gewenste antwoord, dus true als ik ben ingelogd, en anders false

code om de knoppen aan het menu toe te voegen:
PHP:
1
2
3
4
5
6
  if (ingelogd())
    $instellingen["menu"] = array_merge($instellingen["menu"],
    Array("[ Loguit ]"=>"login.php?actie=loguit"));
  else  
    $instellingen["menu"] = array_merge($instellingen["menu"],
    Array("[ Login ]"=>"login.php"));

(ik heb de 2 lange regels maar ff opgesplitst ivm de layout O-) )

[edit]
het gaat dus NIET om de login-functie zelf, deze werkt goed, het gaat over het menu.

[ Voor 44% gewijzigd door KompjoeFriek op 17-08-2003 22:20 ]

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 12-09 14:07

BierPul

2 koffie graag

Genereer dan een unieke code , anders kan ik inderdaad ff zelf een sessie_ID knippen en plakken klaar :)

Daarbij haal ik meestal de status van de user per scherm op , lijkt overbodige performance , maar op het moment dat je de rechten intrekt van een persoon blijft hij/zij ze houden totdat de cookie wordt aangepast ;).

Ik doe meestal username en (encrypted) in een sessie en haal daar de rechten bij op voor elk scherm.

Kost bijna niks maar geeft je wel meer veiligheid, maar das meer een tip dan een oplossing van je probleem :P

[ Voor 71% gewijzigd door BierPul op 17-08-2003 22:25 ]

Ja man


Acties:
  • 0 Henk 'm!

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Kijk eerst eens welke van de 2 vergelijking een false geeft.
Is het de COOKIE-UserName vergelijking of de COOKIE-SessionID vergelijking?

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46
cobratbq schreef op 17 augustus 2003 @ 22:25:
Kijk eerst eens welke van de 2 vergelijking een false geeft.
Is het de COOKIE-UserName vergelijking of de COOKIE-SessionID vergelijking?
Ok ik heb dus even gekeken, maar ik krijg de juiste gegevens terug, dus:
Als je niet ingelogd bent, is voor de User de vergelijking true, en voor het SessionID false. (de uitkomst van ingelogd() = false)
als je inlogd, is de vergelijking van de User true, en voor het SessionID ook. (uitkomst van ingelogd() = true)

ik snap er helemaal nix meer van!
waarom doet hij het in het menu precies verkeerd om !:?

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
maak van die if statement eens:
if( ingelogd() == true )

misschien zijn de waardes van true en false niet gelijk aan ingelogd() en !ingelogd()

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46
Ik denk dat ik weer een stap verder ben, ik zie net dat als ik die waardes in de ingelogd() functie zelf zet, dat deze 2 x op een pagina uitgevoerd wordt. de eerste geeft foute waardes terug, de 2e weer goede.

ik ga even verder pluizen...

[edit]
met ==true erbij geeft hij het zelfde resultaat

[ Voor 11% gewijzigd door KompjoeFriek op 17-08-2003 22:43 ]

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
hmmz... deze uitleg vind ik eigenlijk nog vager dan het probleem...
Als je het zelf maar snapt :)

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46
cobratbq schreef op 17 August 2003 @ 22:43:
hmmz... deze uitleg vind ik eigenlijk nog vager dan het probleem...
Als je het zelf maar snapt :)
iid ;)

en gelukkig doe ik dat nog ook!
ik hebt het gevonden!!!

de eerste keer dat de functie ingelogd() aangeroepen wordt, was de sessie nog niet gestart |:( |:( |:(

dus, alleen ff aan het begin van de pagina session_start(); gezet, en hij werkt perfect!

toch bedankt voor jullie reacties, jullie zijn O+

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Controleer eerst eens of de waarden uit je cookie bij de vervolgpagina goed gezet zijn, controleer daarna eens of de functie session_id wel dezelfde waarde geeft als je hem een pageview later weer aanroept. Daar is iig geen enkele garantie voor, behalve als je daadwerkelijk in dezelfde sessie zit. En _dat_ lijk je weer nergens af te dwingen.

Dan een ander tipje:
Gebruik niet de waarden in een cookie, maar in de sessie zelf, daar is ie tenslotte voor. En de sessie-id wordt door de session-functies zelf wel in de cookie geplaatst.

[ Voor 23% gewijzigd door ACM op 17-08-2003 22:49 ]


Acties:
  • 0 Henk 'm!

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
hehe, zo zie je maar weer, zo'n foutje zit vaak op een stom plekje waar je net niet zoekt.
Daarom lees ik altijd de code mee af en kijk alle antwoorden na totdat je merkt dat het ergens niet klopt met de verwachtingen.

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...

Pagina: 1