Avatar billede YoJonas Nybegynder
28. juli 2012 - 14:18 Der er 5 kommentarer og
1 løsning

Problemer med session

Hey

Jeg har været i gang, med at lave en lille login-formular - men den fungerer ikke helt efter hensigten. Det virker som om, at den ikke gemmer det login, men bare tjekker, at det er korrekt. Det vil sige, jeg kan se login_success.php-siden uden, at skulle skrive login. Har prøvet at kigge, men kan ikke se hvad der er galt. Er der nogen som er skrappe til php - som kan hjælpe mig her? :)

Mine filer se således ud:


login.php:

<form action="checklogin.php" id="login" method="post">
    <div class="formbody">
        <label for="username">Brugernavn:</label>
        <input type="text" name="myusername" id="myusername" class="text" maxlength="50" placeholder="Indtast venligst dit brugernavn" />
        <br />
        <label for="password">Kodeord:</label>
        <input type="password" name="mypassword" id="mypassword" class="text password" maxlength="50" placeholder="Indtast venligst din adgangskode" />
   
        <div class="submit_container">
            <input type="submit" class="submit" value="Log ind" />
        </div>
    </div>
</form>



checklogin.php:

<?php

ob_start();
$host="localhost";
$username="BRUGERNAVN";
$password="PASSWORD";
$db_name="DATABASE";
$tbl_name="members";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){

session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>



login_success.php:

<?php

session_start();
if(!isset($_SESSION["username"])){
}
?>




logout.php:

<?php
session_start();
session_destroy();
?>
28. juli 2012 - 15:24 #1
Funktionen session_register() er depreciated fra php5.3 og helt fjernet i php 5.4, se http://php.net/manual/en/function.session-register.php

Hvis du vil gemme myusername og mypassword i sessionen skal du starte checklogin.php med session_start() og erstatte de to session_register() linjer med:

$_SESSION['username'] = $myusername;
$_SESSION['password'] = $mypassword;
Avatar billede YoJonas Nybegynder
28. juli 2012 - 15:54 #2
Hmm.. Jeg har rettet min checklogin.php fil til nedstående. Men synes ikke rigtigt det gør nogle forslag. Er det her rigtigt?

checklogin.php:

<?php

session_start();
$host="localhost";
$username="BRUGERNAVN";
$password="PASSWORD";
$db_name="DATABASE";
$tbl_name="members";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){

$_SESSION['username'] = $myusername;
$_SESSION['password'] = $mypassword;
header("location:login_success.php");
}

else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>
28. juli 2012 - 16:19 #3
Men jeg er ikke helt klar over hvad du vil der skal ske.  Jeg forstår, at brugeren får login.php med login formen.  Ved klik på 'Log ind' kaldes checklogin.php.  Der undersøges det, om  der i tabellen 'members' er præcis en række med det opgivne username og password.  Hvis ja, så kaldes login_success.php, men den kode du viser udfører ikke noget.  Prøv at forklar (1) hvad du ønsker der skal ske ved korrekt username og password, (2) hvad der sker i stedet for, (3)  hvis koden du viser ikke er komplet, så vis resten.  Jeg foreslår også, at du for test formål i login?success.php indfører denne kode:

echo 'username = ' . $_SESSION['username'];
echo '<br>password = ' . $_SESSION['password'];

så kan du se, om de korrekte username og password rent faktisk bliver gemt i $_SESSION.
Fortæl hvad du får.
Avatar billede YoJonas Nybegynder
28. juli 2012 - 16:38 #4
login_success.php fanger rigtigt nok username og password. Men jeg vil have, at man kun skal kunne se al indholdet på login_success.php hvis det er man er logget ind via kontaktformularen. Og jeg kan også se resten af indholdet selvom jeg ikke er har været forbi kontaktformularen. Derudover, så vil jeg gerne have lavet, så den husker man er logget ind i et stykke tid (lad os sige en uge). Men jeg er heller ikke helt klar over, hvordan jeg skal indsætte cookie-koden?
28. juli 2012 - 18:20 #5
Med den kode du viser til login_success.php er der slet ikke noget indhold at se.  Men hvis du vil at login_success.php kun skal kunne tilgås fra checklogin.php kunne du jo i login_success.php undersøge, om der er oprettet en $_SESSION['username'] og $_SESSION['password'] og hvis ikke så lukke.  Såsom:

<?php

session_start();
if(!$_SESSION["username"] || !$_SESSION['password']) die ('Adgang forbudt!')
?>

Dit oprindelige spørgsmål drejede sig om sessions og om kun at få adgang til login_success.php efter korrekt log-on.  Det spørgsmål håber jeg, at jeg nu har hjulpet med.  Derfor opretter jeg dette som svar.  I #4 udvider du så problemstillingen til at kunne huske login i en uge.  Jeg foreslår, at du tester mine foreslag og ser om du derved opnår at man kan tilgå login_success.php efter korrekt log-on og kun efter korrekt log-on og hvis ja, så afslut DETTE spørgsmål.  Med hensyn til det med at huske et login en uge foreslår jeg, at du opretter et nyt spørgsmål med en ny overskrift.  Så får du frisk opmærksomhed fra alle medlemmer, ikke kun fra de (den) der har været igang med dette spørgsmål.
Avatar billede YoJonas Nybegynder
28. juli 2012 - 21:10 #6
Det funger - tak for hjælpen. Og sorry en snørklede forklaring, men fedt, at du kunne hjælpe mig med mit problem så hurtigt :)
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
Computerworld tilbyder specialiserede kurser i database-management

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