Avatar billede para7 Nybegynder
03. januar 2010 - 13:39 Der er 9 kommentarer og
1 løsning

Simpel login

Jeg er ret ny i php, er vant til asp, hvor jeg sagtens kan lave login. Men det ser ud til at være anderledes med session håndtering. Nogen der kan komme med ideer til at få mit script til at virke. Problemet er at jeg bliver logget ud så snart jeg klikker på List users. Jeg vil gerne blive på samme side efter jeg er logget ind, så login formen bare skjules.

<?php
$pw="a";
if($_POST["pw"]==$pw){
$_session["login"]="on";
}
if($_session["login"]!="on"){
?>
<h3>Login to the Administration</h3>
<form action="test.php" method="post">
<input type="password" name="pw" size="20">
<input type="submit" id="submit" value="Send">
</form>
<?php
exit();
}
if($_GET["q"]=="logout"){
$_session["login"]="";
}
echo "Session login: ".$_session["login"]."<br>";
echo "<a href='test.php?q=logout'>Log out</a> - <a href='test.php'>List users</a><br>";
?>
Avatar billede repox Seniormester
03. januar 2010 - 13:42 #1
Du skal have session_start() med som noget af det første i dine filer.
http://php.net/session_start
Avatar billede mbm2016 Nybegynder
03. januar 2010 - 13:56 #2
Det ville nok være mere sikkert at, bruge ob_start() i starten af din kode, og bruge ob_end_flush i slutningen.

Det vil sikre at: headers already sent fejlen ikke forekommer.

Eksempel uden ob_start():

<?php
echo "hi<br>";
session_start();
echo "Bye<br>";
?>


Denne ovenstående kode vil give fejl, mens denne kode ikke vil:

<?php
ob_start();
echo "hi<br>";
session_start();
echo "Bye<br>";
ob_end_flush();
?>


Derfor mere sikkert at bruge ob_start(), ob_end_flush().
Avatar billede repox Seniormester
03. januar 2010 - 14:10 #3
Jeg vil på det kraftigste fraråde at anvende teknikker som #2 introducerer; det er et skråplan at begynde at anvende funktionaliteter som kan undertrykke eventuelle fejl eller andet som kan give dig et indtryk af at det er i orden at skrive dårlig kode, blot fordi man kan komme ud over det ved at anvende teknikker som ovenstående.

Væn dig til at skrive ordentlig kode - reager på eventuelle fejl - lad dig ikke narre af lette løsninger.

Det er også forkert at benytte ord som 'sikkert' i denne sammenhæng - det er en lappeløsning på dårligt skrevet kode.
Avatar billede para7 Nybegynder
03. januar 2010 - 14:43 #4
I har da ret begge. Jeg har brugt ob_start og flush før, hvor jeg skulle lave en 301 redirect, fordi det var umuligt at få det til at spille ellers.

Jeg bruger meget ind på at skrive koderne optimalt og så simpelt som muligt. Og jeg skal nu LIGE have lavet en simpel login. er under noget tidspres.

Men altså her er hvad jeg nu har, men der er ingen ændring, det virker stadig ikke. I asp ville det virke for længst ;)

<?php
ob_start();
session_start();
$pw="a";
if($_POST["pw"]==$pw){
$_session["login"]="on";
ob_end_flush();
}
if($_session["login"]!="on"){
?>
<h3>Login to the Administration</h3>
<form action="test.php" method="post">
<input type="password" name="pw" size="20">
<input type="submit" id="submit" value="Send">
</form>
<?php
exit();
}
if($_GET["q"]=="logout"){
$_session["login"]="";
}
echo "Session login: ".$_session["login"]."<br>";
echo "<a href='test.php?q=logout'>Log out</a> - <a href='test.php'>List users</a><br>";
?>
Avatar billede repox Seniormester
03. januar 2010 - 14:57 #5
Hvis du alligevel har session_start() nøjagtigt efter ob_start() er det tåbeligt at have ob_start() med (logikken i det burde faktisk give sig selv).

Udover det er superglobale variabler ALTID uppercase.
Altså, $_SESSION og ikke $_session...

Tilrettet din kode, fjernet hvad der er grimt får jeg fint dit script til at virke: http://php.pastebin.com/m2b4f68a3
Avatar billede para7 Nybegynder
03. januar 2010 - 14:58 #6
Jeg har også koden i min rigtige side, men her virker tricket ikke til at få fejlen væk.
Avatar billede para7 Nybegynder
03. januar 2010 - 15:04 #7
repox
Det var det med uppercase reglen, der skulle til. Det virker nu i test filen. dog skal jeg klikke på Log out to gange for at logge ud.

Jeg mangler så at få det til at virke i den rigtige fil. Men jeg vil udbygge testfilen så den ligner den rigtige fil.
Avatar billede para7 Nybegynder
03. januar 2010 - 15:12 #8
OK, jeg fik log out fixet med header location.
Avatar billede para7 Nybegynder
03. januar 2010 - 15:24 #9
OK OG TAK.
Send lige svar for point repox.

Tror jeg klarer mig. Har nu fået session_start(); sat i starten af siden og det kører. Dog skal jeg eliminere gensende headerfejlen når jeg logger ud.
Avatar billede repox Seniormester
03. januar 2010 - 16:00 #10
Du fik et svar her.
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