php login script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jelle VdB

Jelle VdB

09/09/2011 12:23:29
Quote Anchor link
ik ben net begonnen met php. heb een loginscript bijeengesteld, maar krijg nu foutmeldingen ivm session_start, na een beetje research zou dit komen door output die gegenereerd wordt voor mijn session_start maar dat kan niet want ik begin daar onmiddelijk mee

hier mijn code
(note: ik gebruik normaal een include om mijn database in te lezen maar hier heb ik even de variabelen gewoon ingevuld ;) )

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
<?php
    session_start();                                                // Het mogelijk maken om sessions te kunnen gebruiken
    $db_database_connect = mysql_select_db("...", mysql_connect("....be.mysql", "...", "..."));
                                                    // De verbinding met de database maken
    
    $user    = mysql_real_escape_string($_POST["user"]);            // De waarde van het gebruikersnaam veld aankrijgen en beveiligen tegen MySQL Injection
    $pass    = mysql_real_escape_string($_POST["pass"]);            // De waarde van het wachtwoord veld aankrijgen en beveiligen tegen MySQL Injection
    
    $pass    = md5($pass);                                            // Het wachtwoord encrypten met md5
    $pass    = substr(md5($pass),0,16).$pass;                        // Vooraan het wachtwoord een encryptie van het geëncrypteerde wachtwoord toevoegen als salt van 16 tekens
    
    // De query die gaat kijken of de gebruiker bestaat met het ingevulde wachtwoord en meteen ook het id en de level van de gebruiker terug geeft

    $res        = mysql_query("
        SELECT id, level
        FROM users
        WHERE username='"
.$user."'
            AND password='"
.$pass."'
    "
);
    
    if (mysql_num_rows($res) == 1) {                                // Als er maar 1 rij van gevonden is ( 1 gebruiker met deze naam en wachtwoord ) dan loggen we hem in
        list($id, $level)    = mysql_fetch_array($res);
        
        $_SESSION['user']    = array(                                // Maak een array $_SESSION['user'] met de nodige informatie
            "loggedIn"    => true,
            "id"        => $id,
            "level"        => $level
        );
        echo 'logged in';
    }

    else {
    
            echo 'not logged in';                    // Ga na het inloggen naar de opgegeven locatie
    }
?>



de foutmeldingen die ik krijg zijn:

session_start(): Cannot send session cookie - headers already sent by (output started at ../login.php:1) in .../login.php on line 2
session_start(): Cannot send session cache limiter - headers already sent (output started at ../login.php:1) in ../login.php on line 2 not logged in

kan iemand mij helpen. heb na een tijd zoeken dit forum gezocht en dit leek me het meest actieve nederlandstalige forum.
Alvast bedankt voor de hulp.
 
PHP hulp

PHP hulp

22/10/2020 05:21:46
 
- SanThe -

- SanThe -

09/09/2011 12:35:29
Quote Anchor link
Er staat vóór dit script blijkbaar toch ergens enige output. Dat kan ook gewoon alleen een enter of een spatie zijn. Waarom gebruik je slechts een stukje van de md5() en niet helemaal. Nu verzwak je de veiligheid. Elke vorm van foutafhandeling ontbreekt.
Gewijzigd op 09/09/2011 12:35:50 door - SanThe -
 
Jelle VdB

Jelle VdB

09/09/2011 12:41:04
Quote Anchor link
ik gebruik een salt van 16 tekens dus ik md5 tot 16 tekens en md5 dan nog eens, dan moeten ze ook nog weten hoeveel letters deze salt bedraagt en dat vergt een hoop meer werk dacht ik dan.. of zit ik totaal verkeerd?
 
- SanThe -

- SanThe -

09/09/2011 12:45:03
Quote Anchor link
Wacht even, ik keek verkeerd.

$pass = substr(md5($pass),0,16).$pass;

Je pakt de eerste 16 chars van de md5() en daar plak je de complete md5() aan vast. Dus je verlengt hem eigenlijk. Dat is stukken beter dan verkorten (wat ik in eerste instantie dacht te zien).
 
Jelle VdB

Jelle VdB

09/09/2011 12:47:10
Quote Anchor link
Ik heb geprobeerd om de spaties of tabs weg te werken maar nog steeds geen succes.
Toch hartelijk dank voor jouw reactie!
 
- SanThe -

- SanThe -

09/09/2011 12:51:10
Quote Anchor link
Welke editor gebruik je? Copy je script eens in Kladblok en sla het dan opnieuw op. Zo haal je de eventuele bom characters er uit.
 
Jelle VdB

Jelle VdB

09/09/2011 13:00:11
Quote Anchor link
Dit werkte! Ik gebruik Dreamweaver.
Zeer hard bedankt voor de snelle reacties en instructies die u gegeven hebt!
 
Arjan -

Arjan -

09/09/2011 14:06:43
Quote Anchor link
Mysql_real_escape_string pas gebruiken als je de gegevens daadwerkelijk in de database gooit. Deze functie gebruiken voordat je een md5 hash over het wachtwoord plaatst kan leiden tot ongewenste resultaten (verandering van het gekozen wachtwoord bijvoorbeeld). En een md5 hash is altijd veilig in een database toe te voegen, dus is de functie overbodig voor het wachtwoord.
Gewijzigd op 09/09/2011 14:07:24 door Arjan -
 
Jelle VdB

Jelle VdB

09/09/2011 14:22:51
Quote Anchor link
Ok, ik zal er rekening met houden.
Bedankt

Toevoeging op 09/09/2011 19:10:45:

Login.php
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
<?php
    session_start();                                                // Het mogelijk maken om sessions te kunnen gebruiken
    $db_database_connect = mysql_select_db("...", mysql_connect("....be.mysql", "...", "..."));
                                                    // De verbinding met de database maken
    
    $user    = mysql_real_escape_string($_POST["user"]);            // De waarde van het gebruikersnaam veld aankrijgen en beveiligen tegen MySQL Injection
    $pass    = mysql_real_escape_string($_POST["pass"]);            // De waarde van het wachtwoord veld aankrijgen en beveiligen tegen MySQL Injection
    
    $pass    = md5($pass);                                            // Het wachtwoord encrypten met md5
    $pass    = substr(md5($pass),0,16).$pass;                        // Vooraan het wachtwoord een encryptie van het geëncrypteerde wachtwoord toevoegen als salt van 16 tekens
    
    // De query die gaat kijken of de gebruiker bestaat met het ingevulde wachtwoord en meteen ook het id en de level van de gebruiker terug geeft

    $res        = mysql_query("
        SELECT id, level
        FROM users
        WHERE username='"
.$user."'
            AND password='"
.$pass."'
    "
);
    
    if (mysql_num_rows($res) == 1) {                                // Als er maar 1 rij van gevonden is ( 1 gebruiker met deze naam en wachtwoord ) dan loggen we hem in
        list($id, $level)    = mysql_fetch_array($res);
        
        $_SESSION['user']    = array(                                // Maak een array $_SESSION['user'] met de nodige informatie
            "loggedIn"    => true,
            "id"        => $id,
            "level"        => $level
        );
        echo 'logged in';
    }

    else {
    
            echo 'not logged in';                    // Ga na het inloggen naar de opgegeven locatie
    }
?>





Ik heb nu deze code op een andere pagina toegevoegd:

rank.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
session_start();
$location = "login.html";
if(!isset($_SESSION['user'])){
header('Location: ' .$location); } //indien deze niet bestaat doorverwijzen naar login.html
$level = array_search('level', $_SESSION['user']); //waarde uit array lezen die correspondeert met level
echo $level; //testen om te zien wat output is
?>


De output die ik krijg is LoggedIn
Ik zou hier dus eigenlijk de waarde van $level van in index.html willen krijgen.
hoe kan ik dit opolossen: normaal moet ik toch array_search() gebruiken om deze waarde te vinden..
ik wil dit bovenaan elke beveiligde pagina includen om toegang te verstrekken indien het level dit toestaat.
Gewijzigd op 09/09/2011 19:15:20 door Jelle VdB
 



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.