[php sessions] Login klein foutje

Pagina: 1
Acties:

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Ik ben bezig met een moviedb, alleen de login werkt niet helemaal goed. Het inloggen wil helemaal goed, geen probleem, je krijgt als je bent ingelogt ook de extra opties tezien als Edit en Delete.

Het probleem is alleen. Als ik op logout druk, of op F5 (refresh) dan is de login verdwenen, en hij is ook niet uitgelogt (hoeft die met F5 natuurlijk ook niet :+).
PHP:
1
<?  session_start();  require("functies.php");?><body bgcolor="336699"><br>[img]"images/logo.gif">[/img]<br><br><table align="left" width="100%">  <tr><td><div class="font_menu_head">Login Options</div></td></tr> <tr><td height="30"></td></tr><? if ($action1 != "Login" &amp;&amp; ($MySession->Login != 1)){ ?> <form method="post">  <tr><td><table align="left" width="100%">   <tr><td><div class="font_menu"><b>Login:</b></div></td></tr>  <tr><td><div class="font_menu">Username</div></td><td><input class="input" type="Text" name="myusername" style="width:100"></td></tr>  <tr><td><div class="font_menu">Password</div></td><td><input class="input" type="Password" name="mypassword" style="width:100"></td></tr>  <tr><td></td><td><input class="button" type="Submit" name="action1" value="Login"></td></tr> </form>  </table></td></tr>  <? } elseif ($action1 == "Login") {     $result = mysql_query("SELECT password, username FROM leden WHERE username = '$myusername'");    $line = mysql_fetch_array($result);    if ($line[password] == md5($mypassword)){    $MySession->Login = 1;     $MySession->Username = $myusername;     $MySession->Password = $line[password];     session_register("MySession");  if ($action_logout != "Logout") { ?> <tr><td><div class="font_menu">Loged in as: <b><? echo $myusername; ?></b></div></a></td></tr> <tr><td>&amp;nbsp;</td></tr> <tr><td><a href="modify.php?movie_id=" target="main"><div class="font_menu">Add A Movie</div></a></td></tr> <tr><td>&amp;nbsp;</td></tr> <form method="post">  <tr><td><input class="button" type="Submit" name="action_logout" value="Logout"></td></tr> <? } elseif ($action_logout == "Logout") { session_destroy("MySession"); unset($MySession);  } } else { ?> <div class="font_menu">Username or Password error</div> <meta http-equiv="refresh" content="2; url=menu.php">  <? } } ?>

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Zoek eens op "session_destroy" ofzo.

die functie werkt niet al te goed, het best kun je eerst een session_unset doen en dan na de logout (TIJDENS de actionhandler is de sessie data er sowieso nog) kan die persoon niet meer als ingelogd staan.

  • Grum
  • Registratie: Juni 2001
  • Niet online
Je doet:
code:
1
2
3
     $MySession->Login = 1;
     $MySession->Username = $myusername;
     $MySession->Password = $line[password];

Ik zie je nergens $MySession initten .... dus de '->' gaat niet echt ergens over :)

wat je zou kunnen doen:
code:
1
2
class Dummy { };
$MySession = new Dummy();

Nu heb je een leeg 'dummy' object welke je vervolgens kan gebruiken zoals jij wilde.

BTW .. als je de volgende keer start_session aanroept .. zorg dan wel dat je de class Dummy hebt declared. (Ja dit MOET ervoor :P) Anders gaat PHP mekkeren over een class die je wil initten die ie niet kent ;)

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Op vrijdag 08 maart 2002 10:11 schreef Grum het volgende:

Ik zie je nergens $MySession initten .... dus de '->' gaat niet echt ergens over :)
Ik gebruik op een andere pagina dus zoiets als Welcome [username]
en de Login = 1 word gebruikt om ALS je bent ingelogt je dan extra opties tezien krijgt als Edit en Delete bij een movie.

Ik weet niet of je dit bedoelt ofzo, want ik ben geen "ik schrijf code" meneer ofzo :) Het is allemaal nieuw voor me.
wat je zou kunnen doen:
code:
1
2
class Dummy { };
$MySession = new Dummy();

Nu heb je een leeg 'dummy' object welke je vervolgens kan gebruiken zoals jij wilde.

BTW .. als je de volgende keer start_session aanroept .. zorg dan wel dat je de class Dummy hebt declared. (Ja dit MOET ervoor :P) Anders gaat PHP mekkeren over een class die je wil initten die ie niet kent ;)
uhm... Hier snap ik nix van. Ik heb wat zitten klooien maar... :(

Ik klooi nog even verder :)

  • Grum
  • Registratie: Juni 2001
  • Niet online
'->' is alleen te gebruiken in php in combinatie met objecten (die je krijgt door een $var = new ClassName(); te doen.)

Dat mis ik dus hier en dat is ook de reden dat het niet werkt zover ik nu kan zien :)

Vandaar mijn voorstel van een 'Dummy' object zodat je je methode wel kan behouden. Netjes is anders maar dat is een ander verhaal.

Netter is als je het gewoon in een array stopt en die array in de sessie stopt. Maar helaas is moet je dan wel enorm rekening houden dat je de variabelen uit $_SESSION / $HTTP_SESSION_VARS haalt ipv gewoon uitleest.

Als je het toch gewoon wilt uitlezen is het wel aan te raden om het in een object te doen omdat je dat niet kan 'faken' vanuit een POST/GET line request :)