Inloggen met sessions

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis

Dennis

23/11/2004 12:46:00
Quote Anchor link
Ik krijg het maar niet voor elkaar om een werkend script te maken om iemand in te loggen en ingelogd te houden met een session.

Dit is mijn check_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
<?
/*
stuk code om nickname + ww uit formulier te halen en bestaande nickname + ww uit de db om te vergelijken
*/



if ($wachtwoord = $wachtwoord_db AND $nickname = $nickname_db) {
  // Login gelukt, sessie variabelen instellen
  session_start();
  $_SESSION["user_id"] = $id;
  $_SESSION["user_nickname"] = $nickname;
  $_SESSION["user_pass"] = $wachtwoord;
  // en ga direct naar het profiel van de gebruiker
  header("Location: profiel.php");

}
else {
  // Login mislukt
  header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}

?>


Op elke andere pagina van de website staat session_start(); helemaal bovenaan. Is mijn code tot zo ver goed?

Verder wil ik nog weten hoe ik nou de variabelen van de sessie weer opvraag. Kan dat met $_SESSION["variabele"] of gewoon met $variabele?
 
PHP hulp

PHP hulp

27/11/2024 08:19:23
 
Winston Smith

Winston Smith

23/11/2004 12:53:00
Quote Anchor link
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
<?
/*
stuk code om nickname + ww uit formulier te halen en bestaande nickname + ww uit de db om te vergelijken
*/



if ($wachtwoord = $wachtwoord_db && $nickname = $nickname_db) {
  // Login gelukt, sessie variabelen instellen  
  $_SESSION['user_id'] = $id;
  $_SESSION['user_nickname'] = $nickname;
  $_SESSION['user_pass'] = $wachtwoord;
  // en ga direct naar het profiel van de gebruiker
  header("Location: profiel.php");

}
else {
  // Login mislukt
  header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}

?>


Dat zou moeten lukken. Let er wel op dat je geen output hebt voor je de headers aanroept.

Je roept ze aan met $_SESSION['variabele'].
 
Dennis

Dennis

23/11/2004 13:25:00
Quote Anchor link
Hm ik heb je code toegepast maar hij werkt nog niet. De gebruiker is nu altijd ingelogd, whatever hij ook invuld. Alleen de variabelen worden niet ingesteld. Lijkt wel of de if-loop niet werkt..
'&&' blijft ook zwart, herkent het script de tekens dan niet?
 
Thijs -

Thijs -

23/11/2004 13:54:00
Quote Anchor link
hmm waarom niet zo ?

$result ='SELECT user_id, user_nickname FROM tabel WHERE user_nickname = '.$_POST['wachtwoord'].' AND user_nickname = '.$_POST['nickname'].' LIMIT 0.1';

if(mysql_num_rows($result)==1) {
//gebruiker bestaat en heeft goede wachtwoord;
$row = mysql_fetch_array($result);
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_nickname'] = $row['nickname'];
// en ga direct naar het profiel van de gebruiker
header("Location: profiel.php");
}else{
// Login mislukt
header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");
}


en && is hetzelfde als AND
Gewijzigd op 23/11/2004 13:54:00 door Thijs -
 
Dennis

Dennis

23/11/2004 14:28:00
Quote Anchor link
Nu kom ik steeds terug bij het inlogformulier (op index.php), wat ik ook invul.. Maar de query werkt wel. Als ik deze uitvoer in phpMyAdmin en op de plaats van $_POST['wachtwoord'] en $_POST['nickname'] een goed ww + nickname invul geeft hij zoals 't moet 1 rij terug.
 
Thijs -

Thijs -

23/11/2004 14:37:00
Quote Anchor link
oeps :$ had zelf een fout gemaakt ach kan gebeuren

$result =\'SELECT user_id, user_nickname FROM tabel WHERE user_pass = \\\'\'.$_POST[\'wachtwoord\'].\'\\\' AND user_nickname = \\\'\'.$_POST[\'nickname\'].\'\\\' LIMIT 0.1\';

if(mysql_num_rows($result)==1) {
//gebruiker bestaat en heeft goede wachtwoord;
$row = mysql_fetch_array($result);
$_SESSION[\'user_id\'] = $row[\'id\'];
$_SESSION[\'user_nickname\'] = $row[\'nickname\'];
// en ga direct naar het profiel van de gebruiker
header(\"Location: profiel.php\");
}else{
// Login mislukt
header(\"Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.\");
}

je weet zeker dat de namen van je formulieren kloppen met de $_POST data dus je input vakje van gebruikersnaam heeft de naam nickname enz.
 
Dennis

Dennis

23/11/2004 15:01:00
Quote Anchor link
Hij doet nu meer, ik kom pas in profiel.php als het wachtwoord en de nickname kloppen, zoals het hoord. De velden van het formulier had ik gecontroleerd, die zijn nickname en pass.

Hier de code:
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
<?
// db connectie e.d.

$result = mysql_query("SELECT id, user_level, geslacht FROM users WHERE nickname = '".$_POST['nickname']."' AND wachtwoord = '".$_POST['pass']."' LIMIT 0,1");
if(mysql_num_rows($result)==1) {
//gebruiker bestaat en heeft goede wachtwoord;
  $row = mysql_fetch_array($result);
  $_SESSION['user_id'] = $row['id'];
  $_SESSION['user_level'] = $row['user_level'];
  $_SESSION['user_geslacht'] = $row['geslacht'];
  $_SESSION['user_ingelogd'] = 1;

  // en ga direct naar het profiel van de gebruiker
  header("Location: profiel.php");  
}
else{
// Login mislukt
  header("Location: index.php?error=Inloggen mislukt, controleer je wachtwoord.");  
}

?>


Het enige wat nu nog niet gebeurd is het meesturen van de variabelen. In profiel.php wordt bv. geen user_id weergegeven als ik die oproep met $_SESSION['user_id'];
Gewijzigd op 23/11/2004 15:02:00 door Dennis
 
Dennis

Dennis

23/11/2004 21:08:00
Quote Anchor link
Is er iemand die mij misschien nog verder kan helpen hiermee?
Bovenstaande code staat nog steeds in mn .php. De query geeft het juiste resultaat terug (dus nick + ww kloppen, anders ga je terug en zie je een foutmelding), je komt daarna ook op profiel.php, alleen zijn de variabelen niet meegestuurd. Waar ligt dit aan?
 
Thijs -

Thijs -

23/11/2004 21:13:00
Quote Anchor link
je moet natuurlijk overal session_start(); boven hebben staan
 
Dennis

Dennis

23/11/2004 21:25:00
Quote Anchor link
ja zover was ik al ;) op elk document staat session_start(); helemaal bovenaan
 
Erik waarom

Erik waarom

24/11/2004 09:10:00
Quote Anchor link
Ik heb zelf ook 1 gemaakt, die werkt tot nu toe wel. Moet nog wel aan gesleuteld worden, maar het is misschien een bruikbare basis.

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
<?php
session_start();
$ipadres = $REMOTE_ADDR;
if (!empty($_POST)){
    include("..\data.php");
    $gebruikernaam = $gebruikernaam;
    $wachtwoord = $wachtwoord;

    $sql = mysql_query("SELECT * FROM gebruiker WHERE gebruiker_naam='$gebruikernaam'");
    while($res = mysql_fetch_array($sql)){
        $gebruikernaamdb = "$res[gebruiker_naam]";          
        $wachtwoorddb = "$res[gebruiker_wachtwoord]";
        }


    if(($gebruikernaam == $gebruikernaamdb) AND ($wachtwoord == $wachtwoorddb)){
        $_SESSION['gebruikernaam'] = $gebruikernaam;
        $_SESSION['ipadres'] = $ipadres;
        echo "<meta http-equiv='refresh' content='0; url=logged.php'>";
        }

    else{  
        echo "Controleer u wachtwoord en gebruikersnaam"; }    
        }

else{
echo "U moet wel wat invullen";
    }

?>

<form method="post" action=
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo "$_SERVER[PHP_SELF]";?>
>
naam:<input type="tekst" name="gebruikernaam">
w8woord:<input type="password" name="wachtwoord">
<input type="submit" name="toevoegen" value="Inloggen" >
</form>

afmelden.php
-------------------------
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
SESSION_START();
SESSION_DESTROY();
echo "U bent afgemeld. "
?>

<a href="login.php">Inloggen</a>


logged.php
---------------------
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
session_start();
$ip = $REMOTE_ADDR;
if( ($ip == $_SESSION[ipadres]) AND ($gebruikernaam == $_SESSION[gebruikernaam])){
    echo "U bent ingelogd als $gebruikernaam";
    }

else {
    echo "<meta http-equiv='refresh' content='0; url=login.php'>";
     }

?>

<a href="afmelden.php">Afmelden</a>


Heb het in 3 paginas ingedeeld, het kan natuurlijk ook in 1 of 2 paginas. De logged.php moet bij elke beveiligde pagina boven aan de tekst komen met include.

Ook handig om te weten is, dat session_start(); altijd als eerste vermeld moet worde in een php pagina.
 



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.