Session werkt niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jerry php

Jerry php

03/11/2011 10:52:28
Quote Anchor link
Ik heb een session aangemaakt als de gebruiker zijn gegevens invoert en goed is, maar die session wil ik terug halen, maar hij zegt dat hij nog niet ingelogd is. hier controleert hij het:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
        
        if(isset($_SESSION["login"]))
        {

            echo "<h3>Welkom op deze beveiligde pagina!</h3>
                  Je bent aangemeld als: "
.$_SESSION["email"]."<br />
                  Je wachtwoord is: "
.$_SESSION["wachtwoord"]."
                  <p>
                  Een link naar een <a href=beveiligd2.php>andere</a> beveligde pagina
                  </p>
                  <a href=logout.php>Uitloggen</a>"
;
        }

        
        else
        {
            echo "<h3>Je bent nog niet ingelogd.</h3>
                  Je kunt <a href=login.html>hier</a> inloggen, <br/>
                  of <a href=register.php>hier</a> registreren."
;
        }

        


En hier maakt hij eerst de session aan:

[
code]<?php

session_start();

if(isset($_POST["inloggen"]))
{

    $email = $_POST["email"];
    $wachtwoord = $_POST["wachtwoord"];
    
    include "dbconfig.php";
    
    $query = "SELECT * FROM gebruikers
              WHERE email='$email'
              AND wachtwoord='$wachtwoord'"
;
    
    $result = mysql_query($query, $connect)
            or die(mysql_error());
    
    if (mysql_num_rows($result) > 0)
    {

        $_SESSION["login"]      = true;
        $_SESSION["email"]      = $email;
        $_SESSION["wachtwoord"] = $wachtwoord;
        
        header ("location: beveiligd.php");
    }

    
    else
    {
        die("Je hebt geen geldige combinatien van email en wachtwoord gebruikt.
             Maak een keuze: <br />
             <a href=login.html>Opnieuw inloggen</a><br />
             <a href=register.php>Hier registreren</a>"
);
    }    
}


else
{
    header ("location: login.html");
}


?>
 
PHP hulp

PHP hulp

24/01/2021 19:43:58
 
Jelle -

Jelle -

03/11/2011 11:01:32
Quote Anchor link
Op het moment dat je de $_SESSION variabele wilt gebruiken, zul je moeten aangeven aan php dat hij deze moet vullen doormiddel van session_start();

Dit zul je dus ook boven je if(isset($_SESSION['login'])) moeten plaatsen, het is verder maar 1 keer per pagina nodig en het makkelijkste is om dit bovenin je script te plaatsen.

Verder nog een paar tips:
-plain text wachtwoord is niet veilig, gebruik hier voor een manier van hashing (http://www.openwall.com/phpass/)
-variabelen buiten quotes halen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
  //FOUT:
  $var = "tralala $variabele";
  //GOED:
  $var = "tralalal " . $variabele;
?>

-die() is niet erg netjes en stopt je script, wat je wilt is dat het script netjes afloopt
Gewijzigd op 03/11/2011 11:01:59 door Jelle -
 
Jerry php

Jerry php

03/11/2011 11:10:19
Quote Anchor link
smurf bedankt voor je antwoord.
Dat was ik inderdaad vergeten.
Ja die plain text heb je gelijk in, maar ik weet niet zo goed hoe ik dat moet doen. (en die site die u me gaf is een beetje onduidelijk)

En de variabelen buiten de quotes halen snap ik niet zo goed, waar heb ik dat gedaan?

De die moet inderdaad anders, misschien alle meldingen in een array zetten en later uitlezen?
 
Jelle -

Jelle -

03/11/2011 11:23:41
Quote Anchor link
Je zou inderdaad foutmeldingen kunnen verzamelen in een array:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
  $fouten
= array();
  if($ditisfout == 'fout'){
   $fouten[] = 'Er is iets fout gegaan';
  }

  //verder script etc
  
  //en dan waar je foutmeldingen zou willen tonen bijvoorbeeld

  if(count($fouten) > 0){
    echo '<ul>';
    foreach($fouten as $fout){
     echo '<li>' . $fout . '</li>';
    }

    echo '</ul>';
  }

?>


Natuurlijk verder ook wel rekenen houden met dingen die niet getoond zouden moeten worden als er fouten zijn.

De variabelen binnen quotes zag ik in dit stukje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
 $query
= "SELECT * FROM gebruikers
              WHERE email='$email'
              AND wachtwoord='$wachtwoord'"
;
?>


Dat zal dus een stuk leesbaarder zijn op deze manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
 $query
= "SELECT * FROM gebruikers
              WHERE email='"
. $email . "'
              AND wachtwoord='"
. $wachtwoord . "'";
?>


Om te testen zou je voor hashing md5() kunnen gebruiken, maar ik raad wel aan om dit te vervangen door betere methodes zoals die op de site die ik je linkte.

Wat md5() doet is een hash generen voor een bepaalde invoer, deze is altijd hetzelfde maar niet terug te draaien. Het controleren van inloggen gaat dan ook door het ingevoerde wachtwoord te hashen op dezelfde manier als degene in de database.

Het probleem is dat md5 onzettend lang gebruikt is (en veel) waardoor er ondertussen complete tabellen met vertalingen staan waardoor het effect er van steeds minder wordt, vandaar dat ik je aanraad om het alleen voor een test te gebruiken.

Dit artikel kan je denkik ook wat meer duidelijk maken hierover: http://sunnyis.me/blog/secure-passwords/
 
Jerry php

Jerry php

03/11/2011 12:03:54
Quote Anchor link
Dankje smurf! Duidelijk antwoord
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.